C++ IP-Liste einlesen und anpingen

Hab das von Rapidshare + den Quelltext.
Beide gehn leider nicht.

In der liste stehn die IP Adressen die auf dem Screenshot zu sehn sind, also:
"
192.168.0.194
192.168.0.195
192.168.0.196
192.168.0.197
192.168.0.198
127.0.0.1
74.125.43.105
"

Edit: So, hab mal in den Adminmodus gewechselt, und siehe da, es geht -.-

sry für die aufregung...
 
hmm, liegt wirklich an den adminrechten.

bissl OT:
weiß jmd wie ich im Benutzer soetwas dauerhaft als Admin ausführen kann?
ich kann ja rechte Maustaste - Ausführen als Admin..

dann gehts auch.. Brauch es aber das es mir das Programm quasi mit dem autostart hochfährt und dann solange läuft bis es den PC ausschaltet.

mfg

Edit:
mit
%systemroot%\system32\runas.exe /savecred /user:Administrator "D:\Autoshutdown\IP.exe

das in der Verknüpfung vor den Pfad. (Administrator ist der Benutzername als der es ausgeführt werden soll)
die liste.txt muss dann allerding in "C:\WinXP\system32" kopiert werden
mfg
 
Zuletzt bearbeitet:
So, nun muss ich doch noch Fragen: Wo ist den der Timer eingebaut, damit er sich jede Minute aktualisiert? Muss den ja auf ca. 5 Min hochsetzen.

mfg
 
Zeigst du vielleicht einmal den Quelltext, den du verwendest? Ich verlier den Überblick vor lauter verschiedenen :)
 
das was mit kommentaren versehn ist ist von mir. die header datein hab ich wo anderst hingeschmissen..

hau mich aber bitte nicht weil ich dein programm verunstaltet hab. kann (noch) kein C++ und C nur so halb.

Code:
#include "stdafx.h"

#pragma comment(lib,"ws2_32.lib")
#define ICMP_ECHOREPLY 0
#define ICMP_UNREACHABLE 3
#define ICMP_ECHO 8
#define ICMP_CODE_NETWORK_UNREACHABLE 0
#define ICMP_CODE_HOST_UNREACHABLE 1
#define ICMP_MIN_SIZE 8
#define STATUS_FAILED 0xFFFF
#define PING_FAILED 0xFFFFF0
#define PING_TIMEOUT 0xFFFFF1
#define PING_NOHOST 0xFFFFF2

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;
struct sock_char{SOCKET s;char c,no;char *b;};
 
unsigned short Ping_Checksum(unsigned short *buffer,int size){unsigned long cksum=0;while(size>1)
{cksum+=*buffer++;size-=sizeof(unsigned short);}if(size){cksum+=*(unsigned char*)buffer;}
cksum=(cksum>>16)+(cksum&0xffff);cksum+=(cksum>>16);return((unsigned short)(~cksum));}
 
unsigned int Ping_Ext(const char *ip,unsigned int datasize,int recvtimto){SOCKET sckSock;
SOCKADDR_IN saDest,saFrom;int nRecvTimeOut=recvtimto;datasize+=sizeof(icmp_header_t);
char *szICMPData=0;char szRecvBuff[65000+sizeof(ip_header_t)+sizeof(icmp_header_t)];DWORD dwStart,
dwStop;if((sckSock=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP))==INVALID_SOCKET)return PING_FAILED;
if(setsockopt(sckSock,SOL_SOCKET,SO_RCVTIMEO,(char *)&nRecvTimeOut,sizeof(nRecvTimeOut))==
SOCKET_ERROR)return PING_FAILED;{unsigned long ulAddr=inet_addr(ip);HOSTENT *pHostEntity=0;
if(ulAddr==INADDR_NONE){pHostEntity=gethostbyname(ip);memcpy(&ulAddr,pHostEntity->h_addr,
pHostEntity->h_length);}saDest.sin_addr.s_addr=ulAddr;saDest.sin_family=(pHostEntity?pHostEntity->
h_addrtype:AF_INET);saDest.sin_port=0;}{szICMPData=(char *)malloc(sizeof(icmp_header_t)+datasize+1);if(szICMPData==NULL)
return PING_FAILED;((icmp_header_t *)szICMPData)->i_cksum=0;((icmp_header_t *)szICMPData)->i_code=0;
((icmp_header_t *)szICMPData)->i_id=(unsigned short)GetCurrentProcessId();((icmp_header_t *)szICMPData)->
i_seq=0;((icmp_header_t *)szICMPData)->i_type=ICMP_ECHO;memset(szICMPData+sizeof(icmp_header_t),'.',datasize);
memcpy(szICMPData+sizeof(icmp_header_t),"sheel pings",min(datasize,11));}{((icmp_header_t *)szICMPData)->
timestamp=GetTickCount();((icmp_header_t *)szICMPData)->i_cksum=Ping_Checksum
((unsigned short *)szICMPData,datasize+sizeof(icmp_header_t));}if(sendto(sckSock,szICMPData,
sizeof(icmp_header_t)+datasize,0,(SOCKADDR *)&saDest,sizeof(saDest))==SOCKET_ERROR)return
PING_FAILED;dwStart=GetTickCount();while(1){int iResponseLen=0;{int nFromLen=sizeof(saFrom);
iResponseLen=recvfrom(sckSock,szRecvBuff,65000+sizeof(ip_header_t)+sizeof(icmp_header_t),0,
(SOCKADDR *)&saFrom,&nFromLen);dwStop=GetTickCount();if(iResponseLen==SOCKET_ERROR)
{if(WSAGetLastError()==WSAETIMEDOUT)return PING_TIMEOUT;else{return PING_FAILED;}}}
{ip_header_t *hdrIPHeader=(ip_header_t *)szRecvBuff;icmp_header_t *hdrICMPHeader
=(icmp_header_t *)(szRecvBuff+hdrIPHeader->h_len*4);if(hdrICMPHeader->i_id!=
(unsigned short)GetCurrentProcessId())continue;if(hdrICMPHeader->i_type==
ICMP_UNREACHABLE)if(hdrICMPHeader->i_code==ICMP_CODE_HOST_UNREACHABLE||
hdrICMPHeader->i_code==ICMP_CODE_NETWORK_UNREACHABLE)return PING_NOHOST;
if(hdrICMPHeader->i_code==ICMP_ECHOREPLY)break;}}free(szICMPData);
return dwStop-dwStart;}
 
int Ping(const char *ip,unsigned short int z=1000){int i=Ping_Ext(ip,32,z);
if(i==PING_FAILED||i==PING_TIMEOUT||i==PING_NOHOST)return -1;return i;}
int A=0;
 
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()
{
    HANDLE han=GetStdHandle(STD_OUTPUT_HANDLE);
    FILE *pFile;
    WSADATA wsastrct;
    char ip[64];
    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);

            for(i=0;i<60;i++)					// Beginn Startverzögerung, ca. 5 Minuten
            {
                Sleep(5000);					// Zeit in ms (1000 = 1 sec)
                if(kbhit())
                {
                    if(_getch()==27)
                    {
                        fclose(pFile);
                        WSACleanup();
                        return 0;
                    }
                }
            }									//Ende Startverzögerung
    while(1)
    {
        if(feof(pFile))
        {
            fseek(pFile,0,SEEK_SET);
			if (A<0)							//Wenn A kleiner 0 ist... (Keine Antworten oder 0 ms)
			{
				system("C:\\WINXP\\System32\\shutdown.exe -s -f -t 0 "); //Herunterfahren
			}
			A=0;								//Antworten werden wieder gelöscht
            for(i=0;i<60;i++)
            {
                Sleep(1000);
                if(kbhit())
                {
                    if(_getch()==27)
                    {
                        fclose(pFile);
                        WSACleanup();
                        return 0;
                    }
                }
            }
            system("cls");
        }
        ip[0]='\0';
        fgets(ip,64,pFile);
        ip[63]='\0';
        if(ip[strlen(ip)-1]=='\n')
            ip[strlen(ip)-1]='\0';
        if(ip[0]=='\0'){}
        else if(!IsValidIP(ip,1,0,0))
        {
            printf("Nicht g%cltig: ",129U);
            puts(ip);
        }
        else
        {
            int x=Ping(ip);
			if (x>=0)								// Werden nur antworten addiert
			{
			A=A++;									// Es gab eine Antwort
			}
            printf(ip);printf(": ");
            if(x>=0)
                printf("Online: %d ms\n",x);
            else
                printf("Offline\n");
        }
        if(kbhit())
        {
            if(_getch()==27)
            {
                fclose(pFile);
                WSACleanup();
                return 0;
            }
        }
    }
    fclose(pFile);
    WSACleanup();
    return 0;
}
 
Beim
if(A<0){...system shutdown...

Sollte A<=0 als Bedingung rein.
Und beim shutdown eventuell kein -f mitgeben, die Programme werden sich ja wohl ordentlich beenden dürfen.

Außerdem beim Sleep ein paar Zeilen unter dem shutown auf 5000 eintragen, genau wie beim oberen Sleep.
bzw. Sleep auf 1000 lassen und in der Schleife statt 60 300 nehmen, bewirkt das gleiche.

Sollte alles sein.

Gruß

PS: Kann erst wieder um 9 Uhr Antworten.
 
Schön, schon der Dritte dem der Thread geholfen hat :)

Und keine Angst, ich hau keinen weil er Programmieren lernt :D

Gruß
 

Neue Beiträge

Zurück