方法很简单,而且适用于windows xp/2003/vista/7/2008。
运行效果如下:
众所周知,在windows下的命令行程序arp能给我们返回ARP表,那么一切问题就迎刃而解了。在调用arp前,我们只需要做的就是ping 局域网内的ip,最后通过调用arp指令即可获取全部的ip和mac信息了
1首先简历一个bat批处理文件,当然,你可以在调用前动态创建
在C:\创建一个a.bat,其内容如下:
del C:\a.txt
arp -a > c:\a.txt
2现在我们来运行一下a.bat,看到的结果其实并不是完全如我们所愿(如下),所以我们需要使用正则表达式来捕获所需要的数据。
接口: 192.168.1.4 --- 0xd
Internet 地址 物理地址 类型
192.168.1.1 48-5b-39-db-d5-c8 动态
192.168.1.8 20-7c-8f-2f-be-18 动态
192.168.1.255 ff-ff-ff-ff-ff-ff 静态
224.0.0.22 01-00-5e-00-00-16 静态
224.0.0.100 01-00-5e-00-00-64 静态
224.0.0.252 01-00-5e-00-00-fc 静态
239.255.255.250 01-00-5e-7f-ff-fa 静态
255.255.255.255 ff-ff-ff-ff-ff-ff 静态
3创建Windows应用程序,并在窗口上创建一个Progress Button ListView控件,双击Button输入代码如下:
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Button1.Click
For i = 1 To 10
My.Computer.Network.Ping("192.168.1." & i,5)
Me.ProgressBar1.Value = i / 10 * 100
Application.DoEvents()
Next
Shell("C:\a.bat",AppWinStyle.Hide,True,1000)
Dim regex As New System.Text.RegularExpressions.Regex("(\d{1,3}.\d{1,3}) +(\w\w-\w\w-\w\w-\w\w-\w\w-\w\w)")
Dim mach As System.Text.RegularExpressions.MatchCollection
While True
If My.Computer.FileSystem.FileExists("C:\a.txt") Then
Exit While
End If
End While
Dim tmp As String = My.Computer.FileSystem.ReadAllText("C:\a.txt")
mach = regex.Matches(tmp)
Me.ListView1.Items.Clear()
Dim lsv As ListViewItem
For Each x As System.Text.RegularExpressions.Match In mach
Dim z As System.Text.RegularExpressions.Group
z = x.Groups(1)
lsv = New ListViewItem()
lsv.Text = z.Value
z = x.Groups(2)
lsv.SubItems.Add(z.Value)
Me.ListView1.Items.Add(lsv)
Next
End Sub
End Class