internet connection
-
Tja, leider ist das eine Memberfunktion einer Klasse, und der Urheber hat zu wenig Informationen über andere Members hinterlassen. Vielleicht schaust du einfach mal in der Suche nach anderen Quellen.
-
sind doch eigentlich selbsterklärend...

-
flenders schrieb:
sind doch eigentlich selbsterklärend...

für mich nicht!! was übergibt man da????
bitte um hilfe!
cu
-
Also für mich sieht das so aus:
int icmpProto::ping( char *host, int size, int timeout, int count, int pause )
host = Host an der ein Ping geht
size = Packet Größe in Bytes
timeout = wie lange muß auf Antwort gewartet werden, ob in ms, sek, oder min weiss ich nicht
count = wieviele Packeten sollen geschickt werden
pause = mit welchem Interval sollen die Packete gesendet werdenoder fehlt jemanden was besseres ein???
-
need help!
-
schau mal hier:
http://www.bytesandmore.de/rad/index.htm?http://www.bytesandmore.de/rad/cpp/snipp/sc08014.php
Tim
-
Aha, man kann also anhand der Rückgabewerte von GetInternetConnectedState() feststellen, was für eine Verbindung besteht.
@flenders: Wo ist da was selbsterklärend? Die Parameter der Funktion vielleicht, aber über die habe ich nichts geschrieben. Ich meinte die Klassenmembers. Und davon werden in der Funktion ein paar verwendet, und wo ist da was selbsterklärend?
-
@MASTER-Tim: das bringt mir nix!! da getinternetconnection nicht funktioniert wenn ich über netzwerk per internetfreigabe im internet bin!!
erklärung:
// GetInternetConnected() kapselt den Aufruf der API-Funktion
// InternetGetConnectedState() aus der wininet.dll. Diese Funktion
// liefert true auch wenn der Rechner nur an ein TCP/IP-Netzwerk
// angeschlossen ist, bzw wenn ein Proxy-Server konfiguriert ist.
// Der Rückgabewert 'true' ist daher mit Vorsicht zu geniessen: es
// heisst noch lange nicht, dass die Verbindung zum Internet
// tatsächlich besteht. Sollte die GetInternetConnected() also 'true'
// liefern, könnte je nach Einzelfall eine Absicherung (z.B. durch
// das Senden eines Pings zum Zielrechner) durchaus sinnvoll sein.cu
-
@WebFritzi: Meine Aussage bezog sich ausschließlich auf die Parameter

-
/////////////////////////////////////////////////////////////////////////////////////////////////// // Methode "InternetConnected()" liefert ein TRUE zurück falls Internetverbindung aktiv ist /////////////////////////////////////////////////////////////////////////////////////////////////// bool InternetConnected() { char* ptr; string command; string ip; ptr = new char[512]; // Ip von www.suse.de ip="195.135.220.3"; command = "PING " + ip + " -n 1"; FILE *fp= _popen(command.c_str(),"r"); sprintf(ptr,command.c_str()); while(fgets(ptr,512,fp)!=NULL) { command = ptr; if(command.find("Antwort",0)==0){ // Es besteht Internetverbindung _pclose(fp); delete ptr; return true; } } _pclose(fp); delete ptr; // Es besteht keine Internetverbindung return false; } ///////////////////////////////////////////////////////////////////////////////////////////////////hi leute ich wollte das nun so machen mittn pingen...aber bekomme access voilation;-( geht das nicht bei einen winapi programm???
cu surf.
-
Wo genau bekommst du den denn (-> Debugger) - außerdem sollte es doch delete [] ptr, oder

-
ich muss mit dem debugger mal schaun...
das kann man ja machen bei einem winapi prog:command = "PING " + ip + " -n 1"; FILE *fp= _popen(command.c_str(),"r");oder?
ja delete [] gehörts!!!
ich schau mal...
cu
-
hi ich hab jetzt das mit einer message box überprüft!!
access kommt mit dem beginn der while schleife:while(fgets(ptr,512,fp)!=NULL)ich weiß nicht was er da nicht will....fgets mag er nicht???!! ich weiß es nicht!! die funktion wird in winmain(.... aufgerufen....sollte passen oder??
cu surf.
-
#include <windows.h> #include <string> #include <iostream> using namespace std; int WinMain(HINSTANCE hInstance, HINSTANCE hPrevIsntance, LPSTR lpCmdine, int nShowCmd) { WNDCLASS WndClass; HWND hWnd; MSG Msg; char* ptr; string command; string ip; ptr = new char[512]; ip="suse.de"; command = "PING " + ip + " -n 1"; FILE *fp= _popen(command.c_str(),"r"); sprintf(ptr,command.c_str()); while(fgets(ptr,512,fp)!=NULL) { command = ptr; if(command.find("Antwort",0)==0){ MessageBox(NULL, "Your are online", "info", MB_OK | MB_ICONINFORMATION); _pclose(fp); delete [] ptr; } } _pclose(fp); delete [] ptr; MessageBox(NULL, "Your are online", "info", MB_OK | MB_ICONINFORMATION); return(Msg.wParam); }hi leute da ist das gesamte prog!! er gekommt access voilation bei gets!!!??? aber was ist da falsch????? ich finde den fehler nicht!! cu surf.
-
#include <windows.h> #include <string> #include <iostream> using namespace std; int WinMain(HINSTANCE hInstance, HINSTANCE hPrevIsntance, LPSTR lpCmdine, int nShowCmd) { WNDCLASS WndClass; HWND hWnd; MSG Msg; char* ptr; string command; string ip; ptr = new char[512]; ip="suse.de"; command = "PING " + ip + " -n 1"; FILE *fp= _popen(command.c_str(),"r"); sprintf(ptr,command.c_str()); while(fgets(ptr,512,fp)!=NULL) { command = ptr; if(command.find("Antwort",0)==0){ MessageBox(NULL, "Your are offline", "info", MB_OK | MB_ICONINFORMATION); _pclose(fp); delete [] ptr; return(Msg.wParam); } } _pclose(fp); delete [] ptr; MessageBox(NULL, "Your are online", "info", MB_OK | MB_ICONINFORMATION); return(Msg.wParam); }hatte das return obn vergessen......aber er hängt no immer bei fgets.....das komische ist: das programm rennt bei einer konsolenanwendung aber bei winapi nicht;-(( ka ahnung!!!!!

cu
-
So, ich hab mich jetzt auch mal schlau gemacht. In den Google-Groups habe ich etwas gefunden: HIER. Hab den Code etwas umgemodelt, so dass er auf meine Bedürfnisse zugeschnitten ist. Leider habe ich noch ein Problem dabei. Das erste Pingen geht wunderbar. Naja, fast, denn der IP-String "lpszIP" wird nur einmal ordentlich angezeigt. Dann steht da nur noch scheiße drin. WIESO? Der (Compiler) kann doch nicht einfach in meinem Speicher rumpfuschen! Naja, ein zweiter Ping schlägt bei mir auch fehl.
Anmerkung: Der Code ist nur unter WinXP/2000 zu genießen.
#include <windows.h> #include <winsock2.h> #include <stdio.h> /* Program provided as is. It might be awful or worse. It may not work tomorrow. For novelty use only - do not mistake for a real program. Bernard S. Greenberg bsg@basistech.com 25 May 1995 Thanks to Andrew Carlson for revealing the Microsoft ICMP API. build: cl ping.c wsock32.lib (used Microsoft C 9.0 (VC2.0)) */ typedef struct ip_option_information { UCHAR Ttl; UCHAR Tos; UCHAR Flags; UCHAR OptionsSize; PUCHAR OptionsData; } IP_OPTION_INFORMATION, *PIP_OPTION_INFORMATION; typedef struct icmp_echo_reply { ULONG Address; ULONG Status; ULONG RoundTripTime; USHORT DataSize; USHORT Reserved; PVOID Data; IP_OPTION_INFORMATION Options; } ICMP_ECHO_REPLY, *PICMP_ECHO_REPLY; typedef HANDLE (*LPICMPCREATEFILE)(VOID); typedef DWORD (*LPICMPSENDECHO)(HANDLE,LONG,LPVOID,WORD,PIP_OPTION_INFORMATION,LPVOID,DWORD,DWORD); typedef BOOL (*LPICMPCLOSEHANDLE)(HANDLE); #pragma argsused int main(int argc, char ** argv) { HANDLE hh; DWORD dwv; HINSTANCE module; PHOSTENT host; ULONG addr; WSADATA WSAData; char rbuf[5000]; LPICMPCREATEFILE IcmpCreateFile; LPICMPSENDECHO IcmpSendEcho; LPICMPCLOSEHANDLE IcmpCloseHandle; LPCTSTR lpszHost = TEXT("www.web.de"); char lpszIP[16]; if(WSAStartup(MAKEWORD(2,0), &WSAData) != 0) { fprintf (stderr, "Can't start up winsock.\n"); return 0; } addr = inet_addr(lpszHost); if(addr == (ULONG)INADDR_NONE) { host = gethostbyname(lpszHost); if(host == NULL) { fprintf (stderr, "Can't figure out host name/ID %s.\n", lpszHost); getchar(); return 0; } addr = *(ULONG*)(*host->h_addr_list); lstrcpy( lpszIP, inet_ntoa(*(in_addr*)&addr)); } else lstrcpy( lpszIP, lpszHost ); module = LoadLibrary("ICMP.DLL"); if(module == NULL) { fprintf (stderr, "Can't load module ICMP.DLL\n"); getchar(); return 0; } IcmpCreateFile = (LPICMPCREATEFILE)GetProcAddress(module, "IcmpCreateFile"); IcmpSendEcho = (LPICMPSENDECHO)GetProcAddress(module, "IcmpSendEcho"); IcmpCloseHandle = (LPICMPCLOSEHANDLE)GetProcAddress(module, "IcmpCloseHandle"); if ( !IcmpCreateFile || !IcmpSendEcho || !IcmpCloseHandle ) { fprintf(stderr, "Can't find module entry points.\n"); getchar(); return 0; } hh = IcmpCreateFile(); if(!hh) { fprintf(stderr, "Can't open the icmp handle.\n"); getchar(); return 0; } printf ("Ping %s [%s] mit 32 Bytes Daten:\n\n", lpszHost, lpszIP); for(int i = 0; i < 1; i++) { LPVOID reqData = (LPVOID)new BYTE[32]; dwv = IcmpSendEcho(hh, /* Handle of ICMP "file" */ addr, /* IP address of host */ reqData, /* ICMP request data */ 32, /* sizeof above */ NULL, /* IP request options TBS */ rbuf, /* reply buffer */ sizeof(rbuf), /* size of above */ 3000); /* timeout, millisecondsp */ for(unsigned int j=0; j<dwv; j++) { ICMP_ECHO_REPLY* er = (ICMP_ECHO_REPLY*)rbuf; printf("Antwort von %s: Bytes=%d Zeit=%dms TTL=%d\n", lpszIP, 32, er->RoundTripTime, er->Options.Ttl); } delete reqData; } printf ("%s\n", dwv ? "PING!" : "Pffft."); IcmpCloseHandle(hh); FreeLibrary(module); WSACleanup(); getchar(); return 0; }
-
vielen dank webfritzi!!!
aber ich weiß was der fehler ist bei meinem programm!!! ich hab ja ein winapi programm: winmain(.... und ping kann ich ja nur mit fegts aus der konsole auslesen...da winapi und konsolenanwendung was anderes ist funzt mein obriges programm nur als konsolenanwendung!!!!
das programm kann keinen output nehmen mit fegts....da winmain kein kein konsolenprogramm ist, wo er den output bekommen kann...muss ich nun einen eigenen ping schreiben...hmmm????
cu
-
@webfritzi schau mal da:
http://www.crazylabs.info/crazylabs_download.php?rel=pingStat&app=-v1.1.zipda hat auch einer so einen eigenen ping geschrieben..ich kenn mich aber mit rawsockets nicht aus;-( vielleicht kannst du da war rausholen...!??
cu
-
http://tangentsoft.net/wskfaq/examples/rawping.html
...nen Link zur ICMP.dll Methode is da auch.
Für die, die es interessiert: Unten auf der Seite steht auch wie man nen traceroute-Programm mittels ping bauen kann.Oder man holt sich die Ausgabe von ping.exe über nen Pipe ( http://www.c-plusplus.net/forum/topic,14249.html )