枚举局域网计算机名和IP地址

局域网设备扫描的代码资源里,我最近用到一个还不错的 VC++实现,能列出同一网络下的所有计算机名和 IP。讲真,写这类功能有点像捡废铁,得挨个搜、挨个试,还要线程、权限、网络断连那些老问题。这份代码用到了 WNetEnumResourceGetHostByName 两个 API,配合 Winsock,得比较干净,结构也清晰。适合做网络设备管理、企业内网监控之类的项目。

枚举网络设备靠的是 WNetEnumResource(),它能帮你挖出所有共享的计算机资源。搞清楚怎么用 WNetOpenEnum() 打开枚举句柄,再用 WNetEnumResource() 一次次取数据就行,记得每次都判断返回值,网络环境复杂,失败是常态。

拿到机器名之后,用 GetHostByName() 转成 IP 地址。这个函数有点老了,Winsock 1.x 的产物,但在局域网内还是挺稳的。如果你追求更现代的方式,也可以试试 getaddrinfo()

线程安全别忘了,用 CreateMutex()WaitForSingleObject() 做下同步,是你打算多线程搞并发扫描的时候,不加锁容易踩坑。

建议你看看资源文件里的 ListComputer 项目代码,结构上是一步步来的,逻辑还算清楚。比如对错误码的,还有枚举结束后的清理工作,用了 WNetCloseEnum(),挺规范。

如果你做的是网络类工具,像远程控制、IP 管理之类的,了解这些 API 真的必要。再不济,写个内网扫描小工具,也是提升技能的好练手项目。

rar 文件大小:1.83MB