Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Dynamische IP auflösen und als String ausgeben

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
isiprimax



Anmeldungsdatum: 02.01.2009
Beiträge: 77

BeitragVerfasst am: 23.08.2010, 19:38    Titel: Dynamische IP auflösen und als String ausgeben Antworten mit Zitat

Hi, ich versuche seit paar Stunden ein Programm zu schreiben, mit dem ich folgendes machen kann.

Beispiel:

cmd> dynip.exe irgendeine.dyndns.ip

ausgabe> ip ist -> 188.99.77.22

code:
Code:
#Include "win/winsock2.bi"

Dim host As hostent Ptr
Dim ip_i As in_addr
Dim zstr_hostname As ZString * 256

'-------------------------------------------------------------[ init winsock]{
Dim wsaData As WSAData
If( WSAStartup( MAKEWORD( 1, 1 ), @wsaData ) <> 0 ) Then
   Print "Error: WSAStartup failed"
   End 1
End If
'-------------------------------------------------------------[ init winsock]}

zstr_hostname = "google.de"

host = gethostbyname(zstr_hostname)

If host = 0 Then
   Print "Fehler!"
Else
   Print "Server Name -> "; *host->h_name

   '->>addr.s_addr = *(u_long *) remoteHost->h_addr_list[i++];

   Print "Server IP   -> "; inet_ntoa(ip_i)
EndIf

Sleep

'-------------------------------------------------------------[ quit winsock]{
WSACleanup
'-------------------------------------------------------------[ quit winsock]}
End


Ich habe schon ein c++ programm das genau das macht was ich will, nur diese zeile
Code:

addr.s_addr = *(u_long *) remoteHost->h_addr_list[i++];

macht mir Probleme. Ich weiss nicht wie ich sie nach FB übersetzen kann.

Hoffe einer von euch kann mir Tipp geben.

mfg
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 23.08.2010, 20:03    Titel: Antworten mit Zitat

Code:
i += 1
addr.s_addr = *Cast(u_long ptr, remoteHost->h_addr_list(i))
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
isiprimax



Anmeldungsdatum: 02.01.2009
Beiträge: 77

BeitragVerfasst am: 23.08.2010, 22:30    Titel: Antworten mit Zitat

Ich hab das getest, error 7 : Expected ')' found '(' ....
Wenn ich daraus h_addr_list[i] mache (i hat wert von 1) stürzt das Programm ab.

Hat wer vielleicht funktionierendes Beispiel, wie man aus einer DynamischenIP eine Aufgelöste (zb.: 192.168.2.114) macht?

Die Ip scheint in einer Ulong Variable zu sein. Wie Bekomme ich sie nun in das andere Format? Dachte das inet_ntoa() convertiert die.

mfg andy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 23.08.2010, 23:29    Titel: Antworten mit Zitat

Vorneweg: Ich habe von der Materie nicht die leiseste Ahnung ... aber du kannst dir die IP-Variable ja mal im Hexadezimalformat anzeigen lassen, vielleicht hilft das bei der Analyse. Da eine IP-Adresse aus 4 Byte-Werten besteht und diese genau in ein ULONG passen, könnte ich mir vorstellen, dass hier ein Zusammenhang besteht.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
isiprimax



Anmeldungsdatum: 02.01.2009
Beiträge: 77

BeitragVerfasst am: 24.08.2010, 00:23    Titel: Antworten mit Zitat

Danke an alle!

Nun geht es.

Hier die Lösung:
Code:

#Include Once "win/winsock2.bi"
#Include Once "crt/ctype.bi"

Dim wsaData As WSADATA
Dim iResult As Integer
Dim i As Integer = 0
Dim remoteHost As hostent Ptr
Dim host_name As WString * 256
Dim addr As in_addr

If __FB_ARGC__ <= 1 Then
   Print"--- DynIP v 1.0"
   Print
   Print" benutzen -> "; *__FB_ARGV__[0] ;" <Serverhostname>"
   Print" beispiel -> "; *__FB_ARGV__[0] ;" name.dyn.ip"
   Print
   print"--- autor isiprimax @ 8/2010"
   End 1
EndIf

iResult = WSAStartup(MAKEWORD(2,2), @wsaData)
If iResult <> 0 Then
   Print "Winsock Fehler!", iResult
EndIf

host_name = *__FB_ARGV__[1]

If isalpha(host_name[0]) <> 0 Then
   Print"--- DynIP v 1.0 autor isiprimax @ 8/2010"
   Print
   remoteHost = gethostbyname(host_name)
Else
   Print"--- DynIP v 1.0 autor isiprimax @ 8/2010"
   Print
   addr.s_addr = inet_addr(host_name)
EndIf

If remoteHost = NULL Then
   End 1
Else
   Print"   Server Dyn IP -> "; *remoteHost->h_name
   If remoteHost->h_addrtype = AF_INET Then
      i += 1
      addr.s_addr = *Cast(ULong Ptr, *remoteHost->h_addr_list)
      Print"   Server IP     -> "; *inet_ntoa(addr)
   EndIf
EndIf

WSACleanup
End 0


Zuletzt bearbeitet von isiprimax am 24.08.2010, 23:57, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 24.08.2010, 16:25    Titel: Antworten mit Zitat

Lesen kannst du wohl nicht so besonders gut...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
isiprimax



Anmeldungsdatum: 02.01.2009
Beiträge: 77

BeitragVerfasst am: 24.08.2010, 23:54    Titel: Antworten mit Zitat

Wie meinste das?
Hat doch alles geklappt. Hab das was ich wollte.

mfg Andy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz