Avatar billede jps2mt Nybegynder
10. februar 2003 - 22:40 Der er 11 kommentarer og
1 løsning

Finde IP ud fra domæne navn

Jeg har her til aften søgt lidt rundt på nettet, uden dog at finde noget vidre brugbart (om jeg så har søgt hårdt nok eller ej, skal jeg lade være usagt)

Er der en af jer herinde der ved hvordan man finder en IP ud fra et domænenavn med VB??
Avatar billede brops Nybegynder
10. februar 2003 - 22:44 #1
hvad er domænet???
Avatar billede jps2mt Nybegynder
10. februar 2003 - 22:46 #2
Domænet er noget der kommer ind fra loggen på en router, dvs. det er et der ændre sig for hver gang...

Men for at være large, kan vi sige at domænet i dette eks. er www.test.dk
Avatar billede brops Nybegynder
10. februar 2003 - 22:48 #3
sry glemte at kigge kategori men kan du ikke bruge at trække det in fra fx www.myip.dk pg så ligge det ind på siden
Avatar billede jps2mt Nybegynder
10. februar 2003 - 22:49 #4
Wut??

Den forstod jeg ikke...Hvad skal myip nu blandes ind i det for??

Det har noget med DNS at gøre, da det jo som bekendt er en DNS server der oversætter et domæne til en IP adresse...
Avatar billede brops Nybegynder
10. februar 2003 - 22:50 #5
sry glem jeg svarede
Avatar billede joern Nybegynder
10. februar 2003 - 23:07 #6
Hej.

Prøv at søge på ping her i VB-gruppen.  Der er adskillige godkendte svar, noget kan du sikkert bruge.

M.v.h.  Jørn
Avatar billede jps2mt Nybegynder
10. februar 2003 - 23:20 #7
Ja, okay...Måske lige den eneste routine jeg ikke havde skænket en tanke...Men tak for hjælpen...

Vil du ha' dem, eller skal jeg selv??
Avatar billede hsloth Novice
11. februar 2003 - 00:34 #8
Der er en SDK funktion gethostbyname() der giver dig IP-adressen ud fra et hsot navn, som f.eks. www.test.dk.

Hvordan du lige kalder funktionen fra VB er jeg ikke den rette til at svarepå.
Avatar billede sjh Nybegynder
11. februar 2003 - 03:38 #9
'----------------------------- Form1 -----------------------------
Option Explicit

Private Sub Command1_Click()
  MsgBox NameToAddress("www.eksperten.dk")
End Sub

Private Sub Command2_Click()
  MsgBox AddressToName("195.184.98.141")
End Sub

Private Sub Form_Load()
  Call WS_Initialize
End Sub

Private Sub Form_Unload(Cancel As Integer)
  Call WS_Terminate
End Sub
'----------------------------- Form1 -----------------------------


'----------------------------- Module1 -----------------------------
Option Explicit

Const WSADescription_Len = 256
Const WSASYS_Status_Len = 128

Private Type HOSTENT
        hName As Long
        hAliases As Long
        hAddrType As Integer
        hLength As Integer
        hAddrList As Long
End Type

Private Type WSADATA
        wversion As Integer
        wHighVersion As Integer
        szDescription(0 To WSADescription_Len) As Byte
        szSystemStatus(0 To WSASYS_Status_Len) As Byte
        iMaxSockets As Integer
        iMaxUdpDg As Integer
        lpszVendorInfo As Long
End Type

Private Declare Function WSAStartup Lib "wsock32" _
  (ByVal VersionReq As Long, WSADataReturn As WSADATA) As Long
 
Private Declare Function WSACleanup Lib "wsock32" () As Long

Private Declare Function WSAGetLastError Lib "wsock32" () As Long

Private Declare Function gethostbyaddr Lib "wsock32" (addr As Long, addrLen As Long, _
  addrType As Long) As Long

Private Declare Function gethostbyname Lib "wsock32" (ByVal hostname As String) As Long

Private Declare Sub RtlMoveMemory Lib "kernel32" (hpvDest As Any, ByVal hpvSource As Long, _
  ByVal cbCopy As Long)

Private Function IsIP(ByVal strIP As String) As Boolean
  On Error Resume Next
  Dim t As String: Dim s As String: Dim i As Integer
  s = strIP
  While InStr(s, ".") <> 0
    t = Left(s, InStr(s, ".") - 1)
    If IsNumeric(t) And Val(t) >= 0 And Val(t) <= 255 Then s = Mid(s, InStr(s, ".") + 1) _
      Else Exit Function
    i = i + 1
  Wend
  t = s
  If IsNumeric(t) And InStr(t, ".") = 0 And Len(t) = Len(Trim(Str(Val(t)))) And _
    Val(t) >= 0 And Val(t) <= 255 And strIP <> "255.255.255.255" And i = 3 Then IsIP = True
  If Err.Number > 0 Then
    Call MsgBox("Number# " & Err.Number & vbCrLf & "Description:" & Err.Description, vbCritical)
    Err.Clear
  End If
End Function

Private Function MakeIP(strIP As String) As Long
  On Error Resume Next
  Dim lIP As Long
  lIP = Left(strIP, InStr(strIP, ".") - 1)
  strIP = Mid(strIP, InStr(strIP, ".") + 1)
  lIP = lIP + Left(strIP, InStr(strIP, ".") - 1) * 256
  strIP = Mid(strIP, InStr(strIP, ".") + 1)
  lIP = lIP + Left(strIP, InStr(strIP, ".") - 1) * 256 * 256
  strIP = Mid(strIP, InStr(strIP, ".") + 1)
  If strIP < 128 Then
    lIP = lIP + strIP * 256 * 256 * 256
  Else
    lIP = lIP + (strIP - 256) * 256 * 256 * 256
  End If
  MakeIP = lIP
  If Err.Number > 0 Then
    Call MsgBox("Number# " & Err.Number & vbCrLf & "Description:" & Err.Description, vbCritical)
    Err.Clear
  End If
End Function

Private Function NameByAddr(strAddr As String) As String
  On Error Resume Next
  Dim nRet As Long
  Dim lIP As Long
  Dim strHost As String * 255
  Dim strTemp As String
  Dim hst As HOSTENT
 
  If IsIP(strAddr) Then
    lIP = MakeIP(strAddr)
    nRet = gethostbyaddr(lIP, 4, 2)
    If nRet <> 0 Then
      RtlMoveMemory hst, nRet, Len(hst)
      RtlMoveMemory ByVal strHost, hst.hName, 255
      strTemp = strHost
      If InStr(strTemp, Chr(10)) <> 0 Then strTemp = Left(strTemp, InStr(strTemp, Chr(0)) - 1)
      strTemp = Trim(strTemp)
      NameByAddr = strTemp
    Else
      Call MsgBox("Number# " & "9003" & vbCrLf & "Description:" & "Host name not found", vbCritical)
      Exit Function
    End If
  Else
    Call MsgBox("Number# " & "9002" & vbCrLf & "Description:" & "Invalid IP address", vbCritical)
    Exit Function
  End If
  If Err.Number > 0 Then
    Call MsgBox("Number# " & Err.Number & vbCrLf & "Description:" & Err.Description, vbCritical)
    Err.Clear
  End If
End Function

Private Function AddrByName(ByVal strHost As String)
  On Error Resume Next
  Dim hostent_addr As Long
  Dim hst As HOSTENT
  Dim hostip_addr As Long
  Dim temp_ip_address() As Byte
  Dim i As Integer
  Dim ip_address As String
  If IsIP(strHost) Then
    AddrByName = strHost
    Exit Function
  End If
  hostent_addr = gethostbyname(strHost)
  If hostent_addr = 0 Then
    Call MsgBox("Number# " & "9001" & vbCrLf & "Description:" & "Can't resolve hst", vbCritical)
    Exit Function
  End If
  RtlMoveMemory hst, hostent_addr, LenB(hst)
  RtlMoveMemory hostip_addr, hst.hAddrList, 4
  ReDim temp_ip_address(1 To hst.hLength)
  RtlMoveMemory temp_ip_address(1), hostip_addr, hst.hLength
  For i = 1 To hst.hLength
    ip_address = ip_address & temp_ip_address(i) & "."
  Next
  ip_address = Mid(ip_address, 1, Len(ip_address) - 1)
  AddrByName = ip_address
  If Err.Number > 0 Then
    Call MsgBox("Number# " & Err.Number & vbCrLf & "Description:" & Err.Description, vbCritical)
    Err.Clear
  End If
End Function

Public Function AddressToName(strIP As String)
  AddressToName = NameByAddr(strIP)
End Function

Public Function NameToAddress(strName As String)
  NameToAddress = AddrByName(strName)
End Function

Public Sub WS_Initialize()
  Dim udtWSAData As WSADATA
  If WSAStartup(257, udtWSAData) Then Call MsgBox("Number# " & Err.Number & vbCrLf & "Description:" & Err.Description, vbCritical)
End Sub

Public Sub WS_Terminate()
  WSACleanup
End Sub
'----------------------------- Module1 -----------------------------
Avatar billede jps2mt Nybegynder
11. februar 2003 - 17:05 #10
joern har allerede hjulpet mit til at finde min løsning...
Avatar billede joern Nybegynder
11. februar 2003 - 20:05 #11
Hej.

sjh har ellers været flittig, - nå han har vel kopieret fra et projekt.
Men så er her et svar.  Fint at du kunne bruge et af 'ping-spørgsmålene'.

M.v.h.
Avatar billede sjh Nybegynder
11. februar 2003 - 20:18 #12
Ja fra et af de mange projekter jeg har lavet i tidernes morgen ;-)
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