通讯库文件 - NetTools | 网络填充





5.00/5 (2投票s)
填充网卡,在线 (IP 和 MAC) 和离线 IP 在网络环境中
引言
此示例展示了如何使用通讯库的 NetTools 部分,该部分是我和一位同事为演示 SICK A.G. Lidar 设备(例如 LMS5xx)而制作的。
整个库本身使用户能够在 15 行代码内生成一个屏幕上的 3D 激光雷达图像(不包括错误处理等)。整个库将在一个通用下载页面上发布,以便于维护。
本技巧将处理库的 NetTools NetPopulation
部分,展示一种获取网络信息的简单方法。这些工具向您显示您的 PC 有哪些网卡(IP 地址、MAC 地址、连接速度、DHCP 启用 (bool
)、开/关等)。它还向您显示您的网络具有哪些 IP 地址(与您的网卡的子网匹配,因此是 TCP 可连接的)以及这些 IP 的 MAC 地址是什么。
我为什么发布这个?我的目标是为激光雷达设备创建一个简单、开放的平台,因为它们被更广泛地使用。如果您发现任何应该不同的地方,请随时更改源代码并将结果作为评论发布。
背景
如前所述,本技巧仅描述了整个通讯库(绿色块)的一部分,而该库又属于一个更大的框架(所有块在一起)的一部分,这些框架是我内部用来演示激光雷达设备的库。该库已经使用了大约 2 年,并且非常适合我们的演示和现场测试。
所有较小的独立部分可以用于将 SICK 激光雷达数据转换为 3D 点云、LAS、CSV、位图或 3D 点云,只需最少的努力,就能让您能够从这些设备中生成令人惊叹的点云数据、3D 表示或位图。
此示例展示了如何在网络中找到可连接的设备。 这部分的理想额外好处是,从在线 IP 中,MAC 地址是使用 ARP 解析的(基本上,此类异步地 ping 所有可能的 IP,检查它们是否返回信息,然后检查 PC 的 ARP 表以找出 MAC 地址)。 此外,该工具可以轻松检索您的网卡信息。
在我的其他技巧中,我将描述该库的 Serial 和 TCP 部分的使用。 稍后,这些连接将用于检索 LIDAR 数据并将其转换为有用的信息。
Using the Code
附带的示例由较小的部分组成,该示例检索您的网卡信息并检查在线和离线 IP。所有这些只需实例化该类本身(它将在后台启动一个多线程进程)并监视其过程。
Public Mynetwork As SICK_Communication.NetTools.NetPopulation
Public Sub Populate()
'Instantiate the class (which will start the population process
Mynetwork = New SICK_Communication.NetTools.NetPopulation
'Wait for it to finish
Do While Mynetwork.Busy = True
Me.Text = String.Format("Probing network {0}% complete", Mynetwork.PercentCompleted)
Application.DoEvents()
Loop
'Add the found info to the form's text property
Me.Text = String.Format("Done - {0} online | {1} Offline", _
Mynetwork.OnlineIPs.Count, Mynetwork.OfflineIPs.Count)
End Sub
一旦该类完成填充,请读取所有找到的信息。
一个 listbox
的例子,它将填充网卡信息
Public Sub NICtoList()
'Get all the IPv4 capable and online adapters from the PC
Dim MyNics() As SICK_Communication.Ethernet.NICinfo = Mynetwork.MyNICs
'Clear the listbox
ListBox1.Items.Clear()
'Add each Adapter found to the listbox
For Each Adapter As SICK_Communication.Ethernet.NICinfo In MyNics
ListBox1.Items.Add(String.Format("{0} : {1} :{2} (status {3})", _
Adapter.MACaddress, Adapter.IPaddress, Adapter.Adaptername, Adapter.AdapterActive))
Next
End Sub
将在线 IP 信息(IP 地址和 MAC 地址)添加到 listbox
Public Sub OnlineToList()
'Clear the listbox
ListBox2.Items.Clear()
'Add all the items
For Each ST As SICK_Work.SICK_NetTools.NetInfo In Mynetwork.OnlineIPClass
ListBox2.Items.Add(String.Format("{0} : {1}", ST.IPaddress, ST.MACaddress))
Next
End Sub
为了方便排序,我决定将目标设备的 MAC 地址更改为我们公司的名称,而不是完整的 MAC 范围。这将使更容易找到这些特定的设备(您不需要知道 LIDAR 设备的 MAC 范围)。
以及离线 IP 地址(它只是一个 string
,因为没有连接并且没有进一步的信息可用)。
Public Sub OffLineToList()
'Clear listbox
ListBox3.Items.Clear()
'Add offline ip's
For Each ST As String In Mynetwork.OfflineIPs
ListBox3.Items.Add(ST)
Next
End Sub
示例代码的屏幕截图如下所示
关注点
在通讯类中,有一个对结构库 SICK_Work
的引用。这个库只是一堆功能很小的类,但它们构成了完整应用程序的支柱(如图所示)。由于有了这个库,可以将每个库用作一个独立的部分,因为这些库之间的互连并没有在该库本身中实现。引用文件是预构建的库分发版,示例需要这些文件才能构建。
这个类的想法是使查找设备更容易。 尽管现在,我不再经常使用它,但我仍然认为它值得发布。
请注意,IP 地址 255 和 0 都没有被检查,因为它们主要是广播地址,不适合使用(如果您没有注意到,示例代码找到了 31 个在线和 222 个离线(总共 253 个而不是 255 个)IP 地址)
记得分享!!
历史
该程序本身是作为 GPL 软件许可的。 一些示例是从互联网上挑选的。 如果我不小心在没有许可的情况下使用了任何东西或忽略了任何东西,请告诉我,我会纠正我的错误。
到目前为止,这是我和我的同事(被称为 V4-library)对该库的最新改编。 欢迎改进,希望您喜欢使用它。