Board logo

标题: [原创]局域网内MAC扫描 [打印本页]

作者: densn     时间: 2008-4-2 22:03    标题: [原创]局域网内MAC扫描


NbtstatPacket = toByte("000000000001" &_
                "00000000000020434b" &_
                "4141414141414141" &_
                "4141414141414141" &_
                "4141414141414141" &_
                "4141414141410000210001")

DIM WSTATE,ip,HOST,MAC,NSTATE
Set Winsock = Wscript.CreateObject("MSWinsock.Winsock","sck_")
Winsock.Protocol = 1
Set FSO = CreateObject("Scripting.FileSystemObject")
Set objFile = FSO.OpenTextFile(fso.GetBaseName(WScript.ScriptName) & ".txt", 2,True)
BeginTimer = Timer()

objFile.WriteLine "IPAddress" & vbTab & "Host" & vbTab & "MAC"
objFile.WriteLine String(39,"-")

For i = 1 To 254
        NSTATE = True
        HOST = "":MAC = ""
        ip = "192.168.1." & i
        CALL Nbtstat(ip)
        If NSTATE Then
                objFile.WriteLine ip & vbTab & HOST & vbTab & MAC
        End If
Next

EndTimer = Timer()
TimeSpan_Send = EndTimer - BeginTimer
TimeSpan=CStr(Round(TimeSpan_Send, 4))

objFile.WriteLine String(39,"-")
objFile.WriteLine "用时:" & TimeSpan & " 秒"
Wscript.echo "用时:" & TimeSpan & " 秒"

Function Nbtstat(ip)
        Winsock.RemoteHost = ip
        Winsock.RemotePort = 137
        Winsock.SendData NbtstatPacket
        Dim WAIT
        WSTATE = False
        While WAIT < 2 AND Not WSTATE
                  Wscript.Sleep 15
                WAIT = WAIT + 1
        Wend
        If WAIT=2 Then
                NSTATE = False
                'objFile.WriteLine Winsock.state & " - 超时退出!"
        End If
End Function

Sub sck_DataArrival(ByVal bytesTotal)
        On Error Resume Next
        Winsock.GetData RevData
        If Err.Number = 0 Then
                toHex RevData
        Else
                'NSTATE = False
                HOST = "Host not found."
        End If
        Err.Clear
        WSTATE = True
        Winsock.Close
End Sub

Function toByte(data)
        set xml_dom = CreateObject("Microsoft.XMLDOM")
        set l_node = xml_dom.createElement("byte")
        l_node.dataType = "bin.hex"
        l_node.Text = data
        toByte = l_node.nodeTypedvalue
End Function

Function toHex(data)
        set xml_dom = CreateObject("Microsoft.XMLDOM")
        set l_node = xml_dom.createElement("byte")
        l_node.dataType = "bin.hex"
        l_node.nodeTypedvalue = data
        StrHex = l_node.Text
        B = Eval("&H" & Mid(StrHex,56*2+1,1*2))
        HOST = Trim(Hex2Ascii(Mid(StrHex,57*2+1,15*2)))
        [u]MAC  = UCase(Mid(StrHex,57*2+1+(B*18*2),6*2))[/u]
End Function

Function Hex2Ascii(strHex)
        dim i
        for i = 1 To Len(strHex) Step 2
                Hex2Ascii = Hex2Ascii & Chr(Eval("&H" & Mid(strHex, i, 2)))
        Next
End Function
VBS版MAC扫描器,需要安装MSWinsock...
附件中包含:
MSWINSCK(Setup).vbs---->MSWinsock安装
SCANMAC(Batch).vbs   ---->扫描程序


扫描结果:
IPAddress        Host        MAC
---------------------------------------
192.168.1.1        Host not found.       
192.168.1.2        PC-08        00E04C87C737
192.168.1.254        PC-01        00E04C87C106
---------------------------------------
用时:8.875 秒


附件内文件有误请自行修改一下:
MAC  = UCase(Mid(StrHex,57*2+1+(6*18*2),6*2))
改为
MAC  = UCase(Mid(StrHex,57*2+1+(B*18*2),6*2))



下载:
http://upload.cn-dos.net/img/216.rar

[ Last edited by HAT on 2010-6-4 at 10:04 ]
作者: dato     时间: 2008-4-3 09:36
一直用lanhelper有机会试试LZ这个,3Q
作者: dato     时间: 2008-4-3 10:18
结果似乎不是很精确也不知道什么影响了

IPAddress        Host        MAC
---------------------------------------
192.168.1.8        fds        00E04C89679C
192.168.1.16        sfsaf        000000000000
192.168.1.20        YDXZ-22440CCF9B        000000000000
192.168.1.93        64195B64EF644E4        000000000000
192.168.1.101        BBS-EDC335B81EF        000000000000
192.168.1.145        fdsfds        000AE6889133
192.168.1.146        vcx        000000000000
192.168.1.187        BBS-091597F9D12        000000000000
192.168.1.252        wefds        000000000000
---------------------------------------
用时:10.5352 秒
作者: densn     时间: 2008-4-3 14:46


  Quote:
Originally posted by dato at 2008-4-3 10:18 AM:
结果似乎不是很精确也不知道什么影响了

IPAddress        Host        MAC
---------------------------------------
192.168.1.8        fds        00E04C89679C
192.168.1.16        sfsaf        000000000000
192.168.1.20        YD ...

修改一下:
MAC  = UCase(Mid(StrHex,57*2+1+(6*18*2),6*2))
改为
MAC  = UCase(Mid(StrHex,57*2+1+(B*18*2),6*2))

再试一下。
作者: sunxh     时间: 2009-9-12 13:30
谢谢!
作者: provem     时间: 2009-9-13 10:46
大家可以试试用 nbtscan 获取,快捷又准备
nbtscan 论坛里有下载

arp -d>nul 2>nul&nbtscan 192.168.0.1/24>nul 2>nul&arp -a|find /v "00-00-00-00-00-00"|find /v ":"|find "-" >>%tmp%\online.txt
作者: ldr2zjj     时间: 2009-9-19 05:14
怎么我的一个都扫不出来呢~~~我们这一栋楼都同一个局域网里啊
作者: ldr2zjj     时间: 2009-9-19 05:17
发现问题了~~原来我位的IP是196.168.212.*
作者: antony521     时间: 2010-6-3 23:33    标题: 求此贴附件,链接下载不了了!

谁有这个贴中的附件啊!请发给我一份antony521@sina.com
就是VBS版MAC扫描器,需要安装MSWinsock...
附件中包含:
MSWINSCK(Setup).vbs---->MSWinsock安装
SCANMAC(Batch).vbs   ---->扫描程序
谢谢!
作者: HAT     时间: 2010-6-4 10:04    标题: Re 9 楼

附件地址已修复
作者: yonghu111     时间: 2010-6-6 22:17
willsort
作者: yonghu111     时间: 2010-6-6 22:17
不好意思,发错了!
感谢分享!!!
作者: whomwhom     时间: 2010-7-18 16:10
效率很高,扫描很快,缺点就是附件文件有错,得手动更新,否则MAC错得不成样子,建议改下附件,以方便以后下载的人。
作者: lmlz41     时间: 2010-10-29 15:22
也不错的哦!收藏了!
作者: sunhai1979     时间: 2010-10-29 16:49
我的IP范围不是192.168.1.*,怎么修改啊?

不好意思找到了,For i = 1 To 254
        NSTATE = True
        HOST = "":MAC = ""
        ip = "192.200.209." & i
        CALL Nbtstat(ip)
        If NSTATE Then

在这儿修改!!!

[ Last edited by sunhai1979 on 2010-10-29 at 16:55 ]
作者: weilu     时间: 2010-11-15 12:03
谢谢,楼上各位。很实用的脚本。
作者: sohu     时间: 2010-12-4 18:01
只能扫到同一工作组的电脑、、
有什么办法可以全部扫到呢?谢~
作者: waywu     时间: 2010-12-13 12:31
挺有趣的