C++ IP-Liste einlesen und anpingen

Hi,

du hast include<winsock2.h> vergessen

Ausserdem: Beim fopen mit "w" radierst du den gesamten Dateiinhanlt weg!
Wozu willst du Schreibrechte? Ich dachte, er soll die IPs auslesen?

Dann...wo ist denn die ping_ext.h inkludiert?

Nächstes :-) : Beim "if(pFile==NULL)..." nach deinem Schreib-öffnen
hast du ja ein fputs und ein fclose drin!
Die führen sicher zu einem Absturz. Raus damit.
Man kann nichts in eine nicht offene Datei schreiben, und auch diese Datei wieder schließen geht einfach nicht.

Das do-while-quieter... sollte besser in das else darüber rein, nur system("pause"); und return 0; draussenlassen

...Ich schreib dirs einmal um, hab sonst nicht viel zum tun
 
Hier bitte sehr:
Die Funktion IsValidIP kannst du entweder in den Ping_Ext-Header packen oder so herausen lassen, egal
Übrigens sorry für die grauenhafte Formatierung von der Funktion :(

Habs nicht getestet, Farben für On/Offline sind auch noch nicht drinnen
C++:
#include<stdio.h>
#include<conio.h>
#include<winsock2.h>
#include<windows.h>
#include"Ping_Ext.h"

char IsValidIP(char *ip,bool accwsp,char zuweis,bool tri){char p[32];
int e1,e2,e3,e4=1;int i,j;if(accwsp){j=0;for(i=0;i<=(signed)strlen(ip);i++)
{if(ip[i]!=32&&ip[i]!='	'&&ip[i]!=10&&ip[i]!=32){p[j]=ip[i];j++;}}}
else{strcpy(p,ip);}j=0;for(i=0;i<(signed)strlen(p);i++){if((p[i]<'0'||p[i]>'9')
&&p[i]!='.')return 0;if(p[i]=='.')j++;}if((j!=3&&(!tri))||(j!=2&&tri))return 0;
if(!tri)sscanf(p,"%d.%d.%d.%d",&e1,&e2,&e3,&e4);else{sscanf(p,"%d.%d.%d",&e1,&e2,&e3);}
if(e1<0||e2<0||e3<0||e4<0)return 0;if(e1>255||e2>255||e3>255||e4>255)return 0;if(zuweis)
{if(tri){if(zuweis<2)sprintf(ip,"%.3d.%.3d.%.3d",e1,e2,e3);else{sprintf(ip,"%d.%d.%d",
e1,e2,e3);}}else{if(zuweis<2)sprintf(ip,"%.3d.%.3d.%.3d.%.3d",e1,e2,e3,e4);
else{sprintf(ip,"%d.%d.%d.%d",e1,e2,e3,e4);}}}return 1;}

int main()
{
	HANLDE han=(GetStdHandle(STD_OUTPUT_HANDLE);
	FILE *pFile;
	WSADATA wsastrct;
	char ip[64],key;
	int i;
	if(WSAStartup(MAKEWORD(2,2),&wsastrct))return 0;
	pFile=fopen("liste.txt","r");
	if(pFile==NULL)     
	{
		SetConsoleTextAttribute(han,0x0c);
		printf("Achtung! Die Datei 'liste.txt' konnte nicht geladen werden!\n");
		SetConsoleTextAttribute(han,0x07);
		system("pause");
		WSACleanup();
		return 0;
	}
	SetConsoleTextAttribute(han,0x0A);
	printf(" Die Datei 'liste.txt' konnte erfolgreich geladen werden!\n");
	SetConsoleTextAttribute(han,0x07);
	while(1)
	{
		if(feof(pFile))
		{
			fseek(pFile,0,SEEK_SET);
			for(i=0;i<60;i++)
			{
				Sleep(1000);
				if(kbhit())
				{
					if(_getch()==27)
					{
						fclose(pFile);
						WSACleanup();
						return 0;
					}
				}
			}
			system("cls");
		}
		fgets(ip,64,pFile);
		ip[63]='\0';
		if(ip[strlen(ip)-1]=='\n')
			ip[strlen(ip)-1]='\0';
		if(!IsValidIP(ip,1,1,0))
		{
			printf("Nicht gültig: ");
			puts(ip);
		}
		else
		{
			printf(ip);printf(": ");
			if(Ping(ip)>=0)
				printf("Online\n");
			else
				printf("Offline\n");
		}
		if(kbhit())
		{
			if(_getch()==27)
			{
				fclose(pFile);
				WSACleanup();
				return 0;
			}
		}
	}
	fclose(pFile);
	WSACleanup();
	return 0;
}
 
Zuletzt bearbeitet:
Gut Danke, bist der beste :)

Das do-while-quiter, habe ich deshalb reingemacht, weil sich die prozedur alle 10min wiederholen soll. Natürlich könnte ich auch ein anderes Programm suchen, was dieses Programm hier alle 10min öffnet aber so erschien es mir einfacher :)

In das Chaos bring ich schon ein wenig Ordnung und die Farben mach ich auch rein,





EDIT: Obwohl, ein Problem gibt es noch. Das main script funktioniert Prima (!)
Aber bei der Ping_Ext.h gibts noch Probleme udn zwar mit undeklarierten Bezeichnern:eek:

Habe alle Headerdateien includiert, die du gesagt hast, das ich sie brauche.

Wie z.B.

Fehlerkonsole von VC++ 2008 hat gesagt.:
hdrICMPHeader
icmp_header_t
hdrIPHeader

Ich habe die ws2_32.lib schon eingebunden verschiedene Header eingebunden, hilft aber nicht sonderlich viel
Alfons
 
Zuletzt bearbeitet:
Das mit den 10 min hab ich schon reinprogrammiert :-)

Wegen der Header probier mal
#include<iphlpapi.h>

sonst weis ich auch nicht weiter
 
Sch... meine Schuld
Das fehlt noch am anfang deiner Ping_Ext-Headerdatei:

C++:
typedef struct{unsigned int h_len:4;unsigned int version:4;unsigned char tos;
	unsigned short total_len;unsigned short ident;unsigned short frag_and_flags;
	unsigned char ttl;unsigned char proto;unsigned short checksum;unsigned int sourceIP;
	unsigned int destIP;}ip_header_t;
typedef struct{char i_type;char i_code;unsigned short i_cksum;unsigned short i_id;
	unsigned short i_seq;unsigned long timestamp;}icmp_header_t;

Was ich noch vergessen habe zu erwähnen: Die Esc-Taste beendet das Programm
 
Zuletzt bearbeitet:
Joar nun funktioniert es!

Das heißt ich kann es kompilieren.

NUn werde ich es noch ein bisschen ausfeilen, das heißt Farbe rein bringen und ein bisschen benutzerfreundlicher gestalten :)


RIESEN Dankeschön an dich

Alfons
 
Bez. deiner priv. Nachricht:
Wie schon erwähnt, gibt die Funktion Ping entweder die Zeit in Millisekunden oder -1 für Fehler(nicht erreicht etc) zurück
Du musst also überhaupt nichts am Header ändern, nur den Returnwert der Funktion Ping ausgeben

Ändere dazu das hier
C++:
else
{
    printf(ip);
    printf(": ");
    if(Ping(ip)>=0)
        printf("Online\n");
    else
        printf("Offline\n");
}
in das:
C++:
else
{
    printf(ip);
    printf(": ");
    int x=Ping(ip);
    if(x>=0)
        printf("Online, hat %d Millisekunden gebraucht\n",x);
    else
        printf("Offline\n");
}

Das wärs, mehr musst du nicht ändern

Gruß
 
Hmm, funtzt net so wirklich, der Wert ist Null...

Habe es so ähnlich versucht, habe mit
C++:
cout  << "Online" << Ping(ip) << endl;
versucht, aber da war der Wert auch Null :(
 
Zurück