Avatar billede hugopedersen Nybegynder
06. juni 2002 - 10:31 Der 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.

Hvordan kan dette laves i VB
Avatar billede Slettet bruger
06. juni 2002 - 10:33 #1
En ip adresse defineres ikke ud fra mac adressen og omvendt. Så det kan du ikke gøre på denne måde.
Avatar billede hugopedersen Nybegynder
06. juni 2002 - 10:39 #2
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.
Avatar billede 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?
Avatar billede hugopedersen Nybegynder
06. juni 2002 - 10:54 #4
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 :-)
Avatar billede hugopedersen Nybegynder
06. juni 2002 - 10:55 #5
adgangen til interne = adgangen til internettet
Avatar billede Slettet bruger
06. juni 2002 - 10:57 #6
hugopedersen i dhcp manageren kan du reservere ip adresser til bestemte mac adresser. Du kan også se de nuværende mac adresser.
Avatar billede hugopedersen Nybegynder
06. juni 2002 - 10:59 #7
Det er jeg godt klar over, men det løser ikke opgaven :-)
Avatar billede terry Ekspert
06. juni 2002 - 20:55 #8
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
Avatar billede terry Ekspert
06. juni 2002 - 20:55 #9
WO  = WOL
Avatar billede terry Ekspert
06. juni 2002 - 21:00 #10
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!
Avatar billede hugopedersen Nybegynder
07. juni 2002 - 07:42 #11
Fandt svar andet sted
Avatar billede pissed_squirrel Nybegynder
07. juni 2002 - 21:25 #12
Ville du så have noget mod at skrive det her ??

Vi er jo andre der godt kunne tænke os denne funktion også !! :D
Avatar billede hugopedersen Nybegynder
08. juni 2002 - 13:27 #13
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

  intZeros = 0                                                      'Initialize
  NCB.ncb_command = NCBRESET
  Call Netbios(NCB)
 
  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)
           
  If pASTAT = 0 Then GoTo Exit_fhpGet_Address_MAC
 
  NCB.ncb_buffer = pASTAT
  Call Netbios(NCB)
 
  CopyMemory AST, NCB.ncb_buffer, Len(AST)
 
  strTemp = Right$("00" & Hex(AST.adapt.adapter_address(0)), 2) & " " & _
            Right$("00" & Hex(AST.adapt.adapter_address(1)), 2) & " " & _
            Right$("00" & Hex(AST.adapt.adapter_address(2)), 2) & " " & _
            Right$("00" & Hex(AST.adapt.adapter_address(3)), 2) & " " & _
            Right$("00" & Hex(AST.adapt.adapter_address(4)), 2) & " " & _
            Right$("00" & Hex(AST.adapt.adapter_address(5)), 2)

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
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester