枚举局域网计算机名和IP地址
局域网设备扫描的代码资源里,我最近用到一个还不错的 VC++实现,能列出同一网络下的所有计算机名和 IP。讲真,写这类功能有点像捡废铁,得挨个搜、挨个试,还要线程、权限、网络断连那些老问题。这份代码用到了 WNetEnumResource 和 GetHostByName 两个 API,配合 Winsock,得比较干净,结构也清晰。适合做网络设备管理、企业内网监控之类的项目。
枚举网络设备靠的是 WNetEnumResource()
,它能帮你挖出所有共享的计算机资源。搞清楚怎么用 WNetOpenEnum()
打开枚举句柄,再用 WNetEnumResource()
一次次取数据就行,记得每次都判断返回值,网络环境复杂,失败是常态。
拿到机器名之后,用 GetHostByName()
转成 IP 地址。这个函数有点老了,Winsock 1.x 的产物,但在局域网内还是挺稳的。如果你追求更现代的方式,也可以试试 getaddrinfo()
。
线程安全别忘了,用 CreateMutex()
、WaitForSingleObject()
做下同步,是你打算多线程搞并发扫描的时候,不加锁容易踩坑。
建议你看看资源文件里的 ListComputer
项目代码,结构上是一步步来的,逻辑还算清楚。比如对错误码的,还有枚举结束后的清理工作,用了 WNetCloseEnum()
,挺规范。
如果你做的是网络类工具,像远程控制、IP 管理之类的,了解这些 API 真的必要。再不济,写个内网扫描小工具,也是提升技能的好练手项目。
1.83MB
文件大小:
评论区