概述
一、局域网探测器的主要功能
局域网探测器可以探测子网中包含的设备和计算机,并获取计算机的基本信息,检测IP地址的在线状态。探测器由以下5个功能模块组成:获取本地网络信息、子网管理、子网扫描、获取子网中计算机的基本信息、检测设备的在线状态。
1、基础模块
1、设计设备信息类CDevice,类里定义的成员变量用于保存ip地址对应主机的信息,包括ip地址、名称、Mac地址、工作组、在线状态。
2、设计本地主机类Localhost,用于获取本地网卡的信息。定义结构体AdapterInfo,在里面定义IP地址、子网掩码、MAC地址、网卡名称等变量,然后定义了一个集合adapterlist
定义了方法GetLocalAdapterInfo()用于获取本地计算机的网络适配器信息,并将其保存到adapterlist中
3、
3.1 设计子网类CSubnet,保存子网的基本数据和操作(对子网进行扫描)。
通过GetLocalAdapterInfo()获取子网的一个IP地址,再和子网掩码计算出该子网的网络地址和广播地址。
子网中所有有效地址都在网络地址和广播地址之间,将所有IP地址转换为字符串,并添加到DeviceList列表中。
Csubnet的带参构造中,实现将网络地址netaddr从网络字节顺序转换为主机字节顺序,并求得网络地址。
函数FillDevice():子网的网络地址NetAddr和子网掩码NetMask按位与,计算子网中包含的所有IP。
进行子网扫描(ping操作)用到的函数:
基于icmp协议,对之前获取到的所有IP地址执行ping操作,记录有回应的IP地址。
目的就是检测指定IP地址的在线状态。
3.2
还需要获取的有子网中计算机的名称、MAC地址和工作组信息
使用GetHostInfo()函数获取NetBIOS信息,保存到ips映射表项中的CDevice对象中,最后遍历ips中的元素输出。
二、系统主界面设计
系统主界面中的控件:
树视图控件,用于显示子网列表
列表控件,以列表方式显示子网中发现的在线设备
编辑框控件,显示加载和扫描子网的过程。
2、菜单项:
主菜单,在界面左上角。
快捷菜单,对子网右键单击时弹出。
3、打开程序,初始化视图控件,运行OnInitDialog()
在CLocalhost中获取的网络信息全部添加到树视图控件并输出。
4、管理子网:
4.1、设计CSubnetEditDlg,对子网的编辑的提示信息对话框
添加子网用到函数OnAddSubnet()
修改子网用到函数OnEditSubnet()
添加和修改都是用同样的对话框。
删除子网用到的函数:OnDelSubnet()
5、扫描指定的子网:
设计CScanSubnetDlg,扫描子网时的对话框
使用线程函数ScanSubnet()扫描子网
6、检测子网的状态
在列表中显示其在线状态信息,用的还是之前的ping操作
三、可能存在的问题
1、列表控件里的名称、Mac地址、工作组不显示,可能原因:
猜测:
数据为空
未存进ips映射表项中
远端主机没有共享资源或者安装有防火墙,137、138、139等端口被关闭。
原因:udp137、138端口均被禁用了。
137端口的主要作用是在局域网中提供计算机的名字或IP地址查询服务。
138端口的主要作用就是提供NetBIOS环境下的计算机名浏览功能。
在命令提示符里输入netstat -an | findstr "137 138 139"
最后
以上就是长情樱桃为你收集整理的局域网探测器的全部内容,希望文章能够帮你解决局域网探测器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复