06. juni 2002 - 10:31Der er
12 kommentarer og 1 løsning
Finde MAC adresse ud fra IP adresse
Jeg kunne godt tænke mig en rutine der kan returnere MAC adressen på et netkort hvis man kender IP adressen på kortet ! (Ikke bare på den PC man sidder på)
Jeg har en rutine i en Access database der returnerer alle aktuelle IP numre for alle registrerede computere i min PC Inventory DB, men jeg har også brug for MAC adressen i forbindelse med styring af internetadgang.
Altså nu er det jo sådan at hvis man pinger en IP adresse så før man entry i sin ARP tabel hvor man kan se MAC adressen på det netkort der har svaret, så teoretisk set burde det være muligt.
Synes godt om
Slettet bruger
06. juni 2002 - 10:48#3
Jo men det er jo på et lokalt net. Det er måske det du taler om?
Det er det nemlig. Jeg kan godt fortælle baggrunden : jeg har en database med oplysninger om alle vores computere hvor jeg har en rutine der finder den aktuelle IP adresse ud fra det computernavn som maskinen nu er tildelt. I forbindelse med noget nyt software vi skal have installeret til at kontrollere adgangen til interne, skal jeg bruge MAC adressen (den er permanent for maskinen/netkortet hvor imod IP'en kan skifte p.g.a. DHCP) og så mangler jeg lige en rutine til at klare det ud fra IP - jeg gider ikke at gå rundt til alle maskiner for at finde den :-)
Hi hugopedersen! I am also sure its possible and I am sure I have seen some software someware. I have a link which may be of use concerning WO (Wake On Lan) which uses the MAC address. www.depicus.com
Hi again Hugo! I can see they have chaged their homepage. It was possible to download software, but now it doesnt seem to be possible. I still have what I downloaded although I dont think it is exactly what you want. I can send it if your interested!
Måske ikke den pæneste kode, men det ser ud til at virke :-)
Public Const NCBASTAT As Long = &H33 Public Const NCBNAMSZ As Long = 16 Public Const HEAP_ZERO_MEMORY As Long = &H8 Public Const HEAP_GENERATE_EXCEPTIONS As Long = &H4 Public Const NCBRESET As Long = &H32
Public Type NET_CONTROL_BLOCK 'NCB ncb_command As Byte ncb_retcode As Byte ncb_lsn As Byte ncb_num As Byte ncb_buffer As Long ncb_length As Integer ncb_callname As String * NCBNAMSZ ncb_name As String * NCBNAMSZ ncb_rto As Byte ncb_sto As Byte ncb_post As Long ncb_lana_num As Byte ncb_cmd_cplt As Byte ncb_reserve(9) As Byte 'Reserved, must be 0 ncb_event As Long End Type
Public Type ADAPTER_STATUS adapter_address(5) As Byte rev_major As Byte reserved0 As Byte adapter_type As Byte rev_minor As Byte duration As Integer frmr_recv As Integer frmr_xmit As Integer iframe_recv_err As Integer xmit_aborts As Integer xmit_success As Long recv_success As Long iframe_xmit_err As Integer recv_buff_unavail As Integer t1_timeouts As Integer ti_timeouts As Integer Reserved1 As Long free_ncbs As Integer max_cfg_ncbs As Integer max_ncbs As Integer xmit_buf_unavail As Integer max_dgram_size As Integer pending_sess As Integer max_cfg_sess As Integer max_sess As Integer max_sess_pkt_size As Integer name_count As Integer End Type
Public Type NAME_BUFFER name As String * NCBNAMSZ name_num As Integer name_flags As Integer End Type
Public Type ASTAT adapt As ADAPTER_STATUS NameBuff(30) As NAME_BUFFER End Type
Public Declare Function Netbios Lib "netapi32" _ (pncb As NET_CONTROL_BLOCK) As Byte
Public Declare Sub CopyMemory Lib "kernel32" _ Alias "RtlMoveMemory" _ (hpvDest As Any, ByVal _ hpvSource As Long, ByVal _ cbCopy As Long)
Public Declare Function GetProcessHeap Lib "kernel32" () As Long
Public Declare Function HeapAlloc Lib "kernel32" _ (ByVal hHeap As Long, _ ByVal dwFlags As Long, _ ByVal dwBytes As Long) As Long
Public Declare Function HeapFree Lib "kernel32" _ (ByVal hHeap As Long, _ ByVal dwFlags As Long, _ lpMem As Any) As Long
Public Function fhpGet_Address_MAC(Optional strComputer As String) As String ' ----------------------------------------------------------------------------------- ' Purpose : Retrieve the MAC Address for a computer ' Parameters : ' Returns : String ' Created : 06-07-02 HP ' Modified : ' Remarks : ' ----------------------------------------------------------------------------------- Dim strTemp As String 'Returnvalue Dim strNetBiosName As String 'Name of computer Dim intX As Integer 'Counter Dim intZeros As Integer 'Check Dim pASTAT As Long Dim NCB As NET_CONTROL_BLOCK Dim AST As ASTAT
If (strComputer = "") Or (fhpGetComputerName = strComputer) Then strNetBiosName = "* " Else strNetBiosName = Left(Trim(strComputer) & " ", 16) End If NCB.ncb_callname = strNetBiosName 'Send to API NCB.ncb_command = NCBASTAT
NCB.ncb_lana_num = 0 'Use first adaptor NCB.ncb_length = Len(AST)
pASTAT = HeapAlloc(GetProcessHeap(), _ HEAP_GENERATE_EXCEPTIONS Or _ HEAP_ZERO_MEMORY, _ NCB.ncb_length)
Exit_fhpGet_Address_MAC: HeapFree GetProcessHeap(), 0, pASTAT 'Clear memory For intX = 1 To Len(strTemp) 'Loop string If Mid(strTemp, intX, 1) = "0" Then intZeros = intZeros + 1 'Zero value End If Next intX
If intZeros = 12 Then 'Only zero values strTemp = "" 'Use empty string Else strTemp = strTemp 'Use found adress End If fhpGet_Address_MAC = strTemp 'Return address Exit Function
Error_fhpGet_Address_MAC: strTemp = "" 'If an error occured Select Case Err.Number Case 2501 Case 3021 Case Else MsgBox Err.Number & ": " & Err.Description, vbOKOnly + vbCritical, "Error in procedure 'fhpGet_Address_MAC'" End Select Resume Exit_fhpGet_Address_MAC
End Function
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.