1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

C++ IP-Liste einlesen und anpingen

Dieses Thema im Forum "C/C++" wurde erstellt von Alfons2, 9. September 2009.

  1. tobsa

    tobsa Grünschnabel

    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...
     
  2. sheel

    sheel I love Asm Administrator

    Interessant...sollte eigentlich auch ohne Admin gehen.
    Ob das am SP3 liegt?
    Werd ich testen.
     
  3. tobsa

    tobsa Grünschnabel

    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: 25. Oktober 2010
  4. tobsa

    tobsa Grünschnabel

    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
     
  5. sheel

    sheel I love Asm Administrator

    Zeigst du vielleicht einmal den Quelltext, den du verwendest? Ich verlier den Überblick vor lauter verschiedenen :)
     
  6. tobsa

    tobsa Grünschnabel

    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 (Text):
    1. #include "stdafx.h"
    2.  
    3. #pragma comment(lib,"ws2_32.lib")
    4. #define ICMP_ECHOREPLY 0
    5. #define ICMP_UNREACHABLE 3
    6. #define ICMP_ECHO 8
    7. #define ICMP_CODE_NETWORK_UNREACHABLE 0
    8. #define ICMP_CODE_HOST_UNREACHABLE 1
    9. #define ICMP_MIN_SIZE 8
    10. #define STATUS_FAILED 0xFFFF
    11. #define PING_FAILED 0xFFFFF0
    12. #define PING_TIMEOUT 0xFFFFF1
    13. #define PING_NOHOST 0xFFFFF2
    14.  
    15. typedef struct{unsigned int h_len:4;unsigned int version:4;unsigned char tos;
    16.     unsigned short total_len;unsigned short ident;unsigned short frag_and_flags;
    17.     unsigned char ttl;unsigned char proto;unsigned short checksum;unsigned int sourceIP;
    18.     unsigned int destIP;}ip_header_t;
    19. typedef struct{char i_type;char i_code;unsigned short i_cksum;unsigned short i_id;
    20.     unsigned short i_seq;unsigned long timestamp;}icmp_header_t;
    21. struct sock_char{SOCKET s;char c,no;char *b;};
    22.  
    23. unsigned short Ping_Checksum(unsigned short *buffer,int size){unsigned long cksum=0;while(size>1)
    24. {cksum+=*buffer++;size-=sizeof(unsigned short);}if(size){cksum+=*(unsigned char*)buffer;}
    25. cksum=(cksum>>16)+(cksum&0xffff);cksum+=(cksum>>16);return((unsigned short)(~cksum));}
    26.  
    27. unsigned int Ping_Ext(const char *ip,unsigned int datasize,int recvtimto){SOCKET sckSock;
    28. SOCKADDR_IN saDest,saFrom;int nRecvTimeOut=recvtimto;datasize+=sizeof(icmp_header_t);
    29. char *szICMPData=0;char szRecvBuff[65000+sizeof(ip_header_t)+sizeof(icmp_header_t)];DWORD dwStart,
    30. dwStop;if((sckSock=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP))==INVALID_SOCKET)return PING_FAILED;
    31. if(setsockopt(sckSock,SOL_SOCKET,SO_RCVTIMEO,(char *)&nRecvTimeOut,sizeof(nRecvTimeOut))==
    32. SOCKET_ERROR)return PING_FAILED;{unsigned long ulAddr=inet_addr(ip);HOSTENT *pHostEntity=0;
    33. if(ulAddr==INADDR_NONE){pHostEntity=gethostbyname(ip);memcpy(&ulAddr,pHostEntity->h_addr,
    34. pHostEntity->h_length);}saDest.sin_addr.s_addr=ulAddr;saDest.sin_family=(pHostEntity?pHostEntity->
    35. h_addrtype:AF_INET);saDest.sin_port=0;}{szICMPData=(char *)malloc(sizeof(icmp_header_t)+datasize+1);if(szICMPData==NULL)
    36. return PING_FAILED;((icmp_header_t *)szICMPData)->i_cksum=0;((icmp_header_t *)szICMPData)->i_code=0;
    37. ((icmp_header_t *)szICMPData)->i_id=(unsigned short)GetCurrentProcessId();((icmp_header_t *)szICMPData)->
    38. i_seq=0;((icmp_header_t *)szICMPData)->i_type=ICMP_ECHO;memset(szICMPData+sizeof(icmp_header_t),'.',datasize);
    39. memcpy(szICMPData+sizeof(icmp_header_t),"sheel pings",min(datasize,11));}{((icmp_header_t *)szICMPData)->
    40. timestamp=GetTickCount();((icmp_header_t *)szICMPData)->i_cksum=Ping_Checksum
    41. ((unsigned short *)szICMPData,datasize+sizeof(icmp_header_t));}if(sendto(sckSock,szICMPData,
    42. sizeof(icmp_header_t)+datasize,0,(SOCKADDR *)&saDest,sizeof(saDest))==SOCKET_ERROR)return
    43. PING_FAILED;dwStart=GetTickCount();while(1){int iResponseLen=0;{int nFromLen=sizeof(saFrom);
    44. iResponseLen=recvfrom(sckSock,szRecvBuff,65000+sizeof(ip_header_t)+sizeof(icmp_header_t),0,
    45. (SOCKADDR *)&saFrom,&nFromLen);dwStop=GetTickCount();if(iResponseLen==SOCKET_ERROR)
    46. {if(WSAGetLastError()==WSAETIMEDOUT)return PING_TIMEOUT;else{return PING_FAILED;}}}
    47. {ip_header_t *hdrIPHeader=(ip_header_t *)szRecvBuff;icmp_header_t *hdrICMPHeader
    48. =(icmp_header_t *)(szRecvBuff+hdrIPHeader->h_len*4);if(hdrICMPHeader->i_id!=
    49. (unsigned short)GetCurrentProcessId())continue;if(hdrICMPHeader->i_type==
    50. ICMP_UNREACHABLE)if(hdrICMPHeader->i_code==ICMP_CODE_HOST_UNREACHABLE||
    51. hdrICMPHeader->i_code==ICMP_CODE_NETWORK_UNREACHABLE)return PING_NOHOST;
    52. if(hdrICMPHeader->i_code==ICMP_ECHOREPLY)break;}}free(szICMPData);
    53. return dwStop-dwStart;}
    54.  
    55. int Ping(const char *ip,unsigned short int z=1000){int i=Ping_Ext(ip,32,z);
    56. if(i==PING_FAILED||i==PING_TIMEOUT||i==PING_NOHOST)return -1;return i;}
    57. int A=0;
    58.  
    59. char IsValidIP(char *ip,bool accwsp,char zuweis,bool tri){char p[32];
    60. int e1,e2,e3,e4=1;int i,j;if(accwsp){j=0;for(i=0;i<=(signed)strlen(ip);i++)
    61. {if(ip[i]!=32&&ip[i]!=' '&&ip[i]!=10&&ip[i]!=32){p[j]=ip[i];j++;}}}
    62. else{strcpy(p,ip);}j=0;for(i=0;i<(signed)strlen(p);i++){if((p[i]<'0'||p[i]>'9')
    63. &&p[i]!='.')return 0;if(p[i]=='.')j++;}if((j!=3&&(!tri))||(j!=2&&tri))return 0;
    64. if(!tri)sscanf(p,"%d.%d.%d.%d",&e1,&e2,&e3,&e4);else{sscanf(p,"%d.%d.%d",&e1,&e2,&e3);}
    65. if(e1<0||e2<0||e3<0||e4<0)return 0;if(e1>255||e2>255||e3>255||e4>255)return 0;if(zuweis)
    66. {if(tri){if(zuweis<2)sprintf(ip,"%.3d.%.3d.%.3d",e1,e2,e3);else{sprintf(ip,"%d.%d.%d",
    67. e1,e2,e3);}}else{if(zuweis<2)sprintf(ip,"%.3d.%.3d.%.3d.%.3d",e1,e2,e3,e4);
    68. else{sprintf(ip,"%d.%d.%d.%d",e1,e2,e3,e4);}}}return 1;}
    69.  
    70. int main()
    71. {
    72.     HANDLE han=GetStdHandle(STD_OUTPUT_HANDLE);
    73.     FILE *pFile;
    74.     WSADATA wsastrct;
    75.     char ip[64];
    76.     int i;
    77.     if(WSAStartup(MAKEWORD(2,2),&wsastrct))return 0;
    78.     pFile=fopen("liste.txt","r");
    79.     if(pFile==NULL)    
    80.     {
    81.         SetConsoleTextAttribute(han,0x0c);
    82.         printf("Achtung! Die Datei 'liste.txt' konnte nicht geladen werden!\n");
    83.         SetConsoleTextAttribute(han,0x07);
    84.         system("pause");
    85.         WSACleanup();
    86.         return 0;
    87.     }
    88.     SetConsoleTextAttribute(han,0x0A);
    89.     printf(" Die Datei 'liste.txt' konnte erfolgreich geladen werden!\n");
    90.     SetConsoleTextAttribute(han,0x07);
    91.  
    92.             for(i=0;i<60;i++)                   // Beginn Startverzögerung, ca. 5 Minuten
    93.             {
    94.                 Sleep(5000);                    // Zeit in ms (1000 = 1 sec)
    95.                 if(kbhit())
    96.                 {
    97.                     if(_getch()==27)
    98.                     {
    99.                         fclose(pFile);
    100.                         WSACleanup();
    101.                         return 0;
    102.                     }
    103.                 }
    104.             }                                   //Ende Startverzögerung
    105.     while(1)
    106.     {
    107.         if(feof(pFile))
    108.         {
    109.             fseek(pFile,0,SEEK_SET);
    110.             if (A<0)                            //Wenn A kleiner 0 ist... (Keine Antworten oder 0 ms)
    111.             {
    112.                 system("C:\\WINXP\\System32\\shutdown.exe -s -f -t 0 "); //Herunterfahren
    113.             }
    114.             A=0;                                //Antworten werden wieder gelöscht
    115.             for(i=0;i<60;i++)
    116.             {
    117.                 Sleep(1000);
    118.                 if(kbhit())
    119.                 {
    120.                     if(_getch()==27)
    121.                     {
    122.                         fclose(pFile);
    123.                         WSACleanup();
    124.                         return 0;
    125.                     }
    126.                 }
    127.             }
    128.             system("cls");
    129.         }
    130.         ip[0]='\0';
    131.         fgets(ip,64,pFile);
    132.         ip[63]='\0';
    133.         if(ip[strlen(ip)-1]=='\n')
    134.             ip[strlen(ip)-1]='\0';
    135.         if(ip[0]=='\0'){}
    136.         else if(!IsValidIP(ip,1,0,0))
    137.         {
    138.             printf("Nicht g%cltig: ",129U);
    139.             puts(ip);
    140.         }
    141.         else
    142.         {
    143.             int x=Ping(ip);
    144.             if (x>=0)                               // Werden nur antworten addiert
    145.             {
    146.             A=A++;                                  // Es gab eine Antwort
    147.             }
    148.             printf(ip);printf(": ");
    149.             if(x>=0)
    150.                 printf("Online: %d ms\n",x);
    151.             else
    152.                 printf("Offline\n");
    153.         }
    154.         if(kbhit())
    155.         {
    156.             if(_getch()==27)
    157.             {
    158.                 fclose(pFile);
    159.                 WSACleanup();
    160.                 return 0;
    161.             }
    162.         }
    163.     }
    164.     fclose(pFile);
    165.     WSACleanup();
    166.     return 0;
    167. }
     
  7. sheel

    sheel I love Asm Administrator

    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.
     
  8. tobsa

    tobsa Grünschnabel

    So, ist getestet, PC fährt runter wenn ich Netzwerkkabel bei ihm ziehe.
    Perfekt!
    Danke nochmal!

    mfg tobsa
     
  9. sheel

    sheel I love Asm Administrator

    Schön, schon der Dritte dem der Thread geholfen hat :)

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

    Gruß
     
  10. DerFinn

    DerFinn Grünschnabel

    @sheel kannst du nochmal den source code posten von deineer pinger.exe
     
Die Seite wird geladen...