sheel
I love Asm
@RavenC: Hier geht es um C, ausserdem hilft rumprobieren auch nichts.
Und wie bekommst du denn Wert in ne Variable? So einfach wird das nicht werden
@Alfons2: Welche IP hast du denn versucht?
Wenn es 127.0.0.1 ist, ist verständlich, dass 0 rauskommt
edit: So, jetzt hab ich mein eigenes Programm endlich einmal kompiliert und ein paar Kleinigkeiten ausgebessert.
Die Farben für On/Offline sind zwar wieder nicht drinnen, aber jedenfalls kommen bei mir nicht 0ms (nur bei 127.0.0.1 )
Hier der Source nocheinmal komplett
Und wie bekommst du denn Wert in ne Variable? So einfach wird das nicht werden
@Alfons2: Welche IP hast du denn versucht?
Wenn es 127.0.0.1 ist, ist verständlich, dass 0 rauskommt
edit: So, jetzt hab ich mein eigenes Programm endlich einmal kompiliert und ein paar Kleinigkeiten ausgebessert.
Die Farben für On/Offline sind zwar wieder nicht drinnen, aber jedenfalls kommen bei mir nicht 0ms (nur bei 127.0.0.1 )
Hier der Source nocheinmal komplett
C++:
#include<stdio.h>
#include<process.h>
#include<time.h>
#include<winsock2.h>
#include<windows.h>
#include<conio.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;}
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);
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");
}
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);
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;
}
Zuletzt bearbeitet: