找回密码
 加入
搜索
查看: 3479|回复: 11

网卡序列号如何获得?

  [复制链接]
发表于 2008-10-6 21:40:41 | 显示全部楼层 |阅读模式
请各位高手领教!我已经找遍了。

[ 本帖最后由 wzhualian888 于 2008-10-6 21:42 编辑 ]
发表于 2008-10-6 21:49:39 | 显示全部楼层
MAC:

#include <GUIConstantsEx.au3>
#include <GuiIPAddress.au3>
#include <GuiListView.au3>
#include <GuiImageList.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <ButtonConstants.au3>


$hGUI = GUICreate("MAC 地址扫描器", 424, 320, -1, -1, BitOR($WS_CAPTION, $WS_SYSMENU), $WS_EX_CONTEXTHELP)
GUICtrlCreateGroup("扫描 MAC 地址", 7, 6, 410, 290)

GUICtrlCreateLabel("从", 21, 26, 16, 18, $SS_LEFT + $SS_CENTERIMAGE)
$IPAdd0 = _GUICtrlIpAddress_Create($hGui, 36, 26, 110, 18)
_GUICtrlIpAddress_Set($IPAdd0, @IPAddress1)
GUICtrlCreateLabel("到", 153, 26, 16, 18, $SS_LEFT + $SS_CENTERIMAGE)
$IPAdd1 = _GUICtrlIpAddress_Create($hGui, 174, 26, 110, 18)
_GUICtrlIpAddress_Set($IPAdd1, @IPAddress1)
$Button = GUICtrlCreateCheckbox("扫描(&C)", 293, 25, 55, 20, $BS_PUSHLIKE)
$Save = GUICtrlCreateButton("保存(&S)", 350, 25, 55, 20)

$hListView = _GUICtrlListView_Create($hGUI, "MAC 地址|计算机名|IP地址", 21, 54, 382, 230, -1, 0x00000220)
;$hListView = GUICtrlCreateListView("MAC 地址|计算机名|IP地址", 21, 54, 382, 230)
_GUICtrlListView_SetExtendedListViewStyle ($hListView, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES, $LVS_EX_SUBITEMIMAGES))
;$hImage = _GUIImageList_Create ()
;_GUICtrlListView_SetImageList ($hListView, $hImage, 1)
_GUICtrlListView_SetColumnWidth($hListView, 0, 140)
_GUICtrlListView_SetColumnWidth($hListView, 1, 100)
_GUICtrlListView_SetColumnWidth($hListView, 2, 122)
$hProgress = GUICtrlCreateProgress(7, 300, 410, 18)

GUISetState(@SW_SHOW)

While 1
        $nMsg = GUIGetMsg()
        $aIP0 = _GUICtrlIpAddress_GetArray($IPAdd0)
        $aIP1 = _GUICtrlIpAddress_GetArray($IPAdd1)
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
        Case $Save
                     $List_n=_GUICtrlListView_GetItemCount($hListView)
        
              If Not $List_n Then
                    MsgBox(16,"错误","请先扫描好之后再点击列表格保存!!!")
                               Else
                                     IniWrite("config.ini", "Copyright", "Production","www.autoitx.com")
                             IniWrite("config.ini", "Copyright", "ScanMac last time", _
                                                StringFormat("%4d-%1d-%1d %1d:%02d:%02d", @YEAR, @MON, @MDAY, @HOUR, @MIN, @SEC))
                               For $i = 0 To $List_n - 1
                                       $MacItem = _GUICtrlListView_GetItemTextArray($hListView, $i)
                           If $MacItem[0] <> 3 Then ContinueLoop
                                  IniWrite("config.ini", "Mac2Ip", $MacItem[1], $MacItem[2] & "|" & $MacItem[3])
                                  Next
                                  MsgBox(64, "提示", "保存列表完成!")
                        EndIf
        

                Case $Button
                        Switch GUICtrlRead($Button)
                                Case 1
                                        _GUICtrlListView_DeleteAllItems($hListView)
                                        TCPStartup()
                                        ;定义:步进、IP总数
                                        Local $iStep = 1, $gross, $n = 0
                                        $gross = $aIP0[3] - $aIP1[3]
                                        If $gross > 0 Then
                                                $iStep = -1
                                        Else
                                                $gross = Abs($gross)
                                        EndIf
                                        $gross += 1
                                        $aIP0[3] -= $iStep
                                        Do
                                                $aIP0[3] += $iStep 
                                                ;_GUICtrlIpAddress_SetArray($IPAdd0, $aIP0)
                                                GUICtrlSetData($hProgress, Int(100 * ($gross - Abs($aIP1[3] - $aIP0[3])) / $gross));进度条百分点
                                                $nIP = $aIP0[0] & "." & $aIP0[1] & "." & $aIP0[2] & "." & $aIP0[3]
                                                Ping($nIP, 5)
                                                If @error Then ContinueLoop
                                                $nHost = __TCPIpToName($nIP)
                                                $nMAC = _API_Get_NetworkAdapterMAC($nIP)
                                                If  @error Or Not $nHost Then ContinueLoop
                                                ;GUICtrlCreateListViewItem($nMAC & "|" & $nHost & "|" & $nIP, $hListView)
                                                _GUICtrlListView_AddItem ($hListView, $nMAC, $n)
                                                _GUICtrlListView_AddSubItem ($hListView, $n, $nHost, 1, 1)
                                                _GUICtrlListView_AddSubItem ($hListView, $n, $nIP, 2, 2)
                                                $n += 1
                                        Until GUICtrlRead($Button) <> 1 Or $aIP0[3] = $aIP1[3]
                                        TCPStartup()
                                        GUICtrlSetState($Button, 4)
                                        GUICtrlSetData($hProgress, 0)
                                Case Else
                                        GUICtrlSetData($hProgress, 0)
                        EndSwitch
                Case Else
                        For $i = 0 To 2
                                If $aIP1[$i] >= $aIP0[$i] Then ContinueLoop
                                $aIP1[$i] = $aIP0[$i]
                                _GUICtrlIpAddress_SetArray($IPAdd1, $aIP1)
                        Next
        EndSwitch
WEnd

Func __TCPIpToName($sIp, $iOption = Default, $hDll_Ws2_32 = Default)
        Local $vbinIP, $vaDllCall, $vptrHostent, $vHostent, $sHostnames, $vh_aliases, $i
        Local $INADDR_NONE = 0xffffffff, $AF_INET = 2, $sSeperator = @CR
        If $iOption = Default Then $iOption = 0
        If $hDll_Ws2_32 = Default Then $hDll_Ws2_32 = "Ws2_32.dll"
        $vaDllCall = DllCall($hDll_Ws2_32, "long", "inet_addr", "str", $sIp)
        If @error Then Return SetError(1, 0, "") ; inet_addr DllCall Failed
        $vbinIP = $vaDllCall[0]
        If $vbinIP = $INADDR_NONE Then Return SetError(2, 0, "") ; inet_addr Failed
        $vaDllCall = DllCall($hDll_Ws2_32, "ptr", "gethostbyaddr", "long*", $vbinIP, "int", 4, "int", $AF_INET)
        If @error Then Return SetError(3, 0, "") ; gethostbyaddr DllCall Failed
        $vptrHostent = $vaDllCall[0]
        If $vptrHostent = 0 Then
                $vaDllCall = DllCall($hDll_Ws2_32, "int", "WSAGetLastError")
                If @error Then Return SetError(5, 0, "") ; gethostbyaddr Failed, WSAGetLastError Failed
                Return SetError(4, $vaDllCall[0], "") ; gethostbyaddr Failed, WSAGetLastError = @Extended
        EndIf
        $vHostent = DllStructCreate("ptr;ptr;short;short;ptr", $vptrHostent)
        $sHostnames = __TCPIpToName_szStringRead(DllStructGetData($vHostent, 1))
        If @error Then Return SetError(6, 0, $sHostnames) ; strlen/sZStringRead Failed
        If $iOption = 1 Then
                $sHostnames &= $sSeperator
                For $i = 0 To 63 ; up to 64 Aliases
                        $vh_aliases = DllStructCreate("ptr", DllStructGetData($vHostent, 2) + ($i * 4))
                        If DllStructGetData($vh_aliases, 1) = 0 Then ExitLoop ; Null Pointer
                        $sHostnames &= __TCPIpToName_szStringRead(DllStructGetData($vh_aliases, 1))
                        If @error Then
                                SetError(7) ; Error reading array
                                ExitLoop
                        EndIf
                Next
                Return StringSplit(StringStripWS($sHostnames, 2), @CR)
        Else
                Return $sHostnames
        EndIf
EndFunc   ;==>__TCPIpToName

Func __TCPIpToName_szStringRead($iszPtr, $iLen = -1, $hDll_msvcrt = "msvcrt.dll")
        Local $aStrLen, $vszString
        If $iszPtr < 1 Then Return "" ; Null Pointer
        If $iLen < 0 Then
                $aStrLen = DllCall($hDll_msvcrt, "int:cdecl", "strlen", "ptr", $iszPtr)
                If @error Then Return SetError(1, 0, "") ; strlen Failed
                $iLen = $aStrLen[0] + 1
        EndIf
        $vszString = DllStructCreate("char[" & $iLen & "]", $iszPtr)
        If @error Then Return SetError(2, 0, "")
        Return SetError(0, $iLen, DllStructGetData($vszString, 1))
EndFunc   ;==>__TCPIpToName_szStringRead

Func _API_Get_NetworkAdapterMAC($sIp)
        Local $MAC, $MACSize
        Local $i, $s, $r, $iIP

        $MAC = DllStructCreate("byte[6]")
        $MACSize = DllStructCreate("int")

        DllStructSetData($MACSize, 1, 6)
        $r = DllCall("Ws2_32.dll", "int", "inet_addr", "str", $sIp)
        $iIP = $r[0]
        $r = DllCall("iphlpapi.dll", "int", "SendARP", "int", $iIP, "int", 0, "ptr", DllStructGetPtr($MAC), "ptr", DllStructGetPtr($MACSize))
        $s = ""
        For $i = 0 To 5
                If $i Then $s = $s & ":"
                $s = $s & Hex(DllStructGetData($MAC, 1, $i + 1), 2)
        Next
        If $s = "00:00:00:00:00:00"  Then SetError(1)
        Return $s
EndFunc   ;==>_API_Get_NetworkAdapterMAC
发表于 2008-10-6 23:09:47 | 显示全部楼层
不错,楼上的回答了..
发表于 2009-7-10 00:34:23 | 显示全部楼层
我晕找一个mac地址这么复杂
发表于 2010-1-29 18:12:57 | 显示全部楼层
#include <ACN_NET.au3>
MsgBox(0,"网卡MAC地址","网卡MAC地址是 " & _API_Get_NetworkAdapterMAC (@IPAddress1))
这个简单吧
发表于 2010-1-29 18:32:09 | 显示全部楼层
(@IPAddress1   这个应该是IP地址吧
发表于 2010-2-5 23:20:55 | 显示全部楼层
这个简单吧
非典男人 发表于 2010-1-29 18:12



    简单
发表于 2010-2-5 23:24:31 | 显示全部楼层
4# 5# 阶段性盗墓
发表于 2010-2-5 23:26:27 | 显示全部楼层
ipconfig /all | find /i "Physical Address"
发表于 2010-2-6 17:33:20 | 显示全部楼层
狮子好久没出现了..
发表于 2010-2-6 18:06:26 | 显示全部楼层
狮子好久没出现了..
发表于 2010-2-6 22:09:22 | 显示全部楼层
gapkiller 的头像我很喜欢!不知道是否借来用用!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-16 22:55 , Processed in 0.090362 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表