icmpping
20120428 23
_ping
ping
1
2
3
pingwindowsping.
ping ***.***.***.***
***ip4
reply from ***.***.***.***
request timeout ping
1ping
ping pingping icmpicmpicmpicmp
icmpipipicmp()
ipicmpipicmp
8bit8bit16bit 16biticmp
pingicmp0icmp8icmpping
ip
tcp/ip, ip(ip datagram).
, , ip.
icmp
tcp/ipicmp(internet control message protocol), : echoecho replyping icmp
2rawsocket
pingicmpipipicmprawsocket
socketsocketbind.
3
1
ipicmp
2
windowsping
.
1 ipicmp
2 rawsocket
3ping
4socket ws2_32.lib
5 ping
6
1ipicmp
ipicmp
//ip
typedef struct iphdr
{
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 ;// ip
unsigned int destip ;// ip
};
//icmp
typedef struct icmphdr
{
byte i_type ; //
byte i_code ; //
ushort i_cksum ; //
ushort i_id ; //
ushort i_seq ; //
ulong timestamp ; //
};
2.
wsadata wsadata ;
socket sockraw ;
struct sockaddr_in dest,from ;
struct hostent*hp ;
int bread,datasize=32,packnum=6;
int fromlen=sizeof(from);
int timeout=1000 ;
int statistic=0 ;
int ts=0;
char*dest_ip ;
char*icmp_data ;
char*recvbuf ;
unsigned int addr=0 ;
ushort seq_no=0 ;
int temp;
3
1void fill_icmp_data(char*icmp_data,int datasize,int ts); //icmp
void fill_icmp_data(char*icmp_data,int datasize,int ts)
{
icmpheader*icmp_hdr ;
char*datapart ;
icmp_hdr=(icmpheader*)icmp_data ;
icmp_hdr->i_type=icmp_echo ;
icmp_hdr->i_code=0 ;
icmp_hdr->i_id=(ushort)getcurrentprocessid();
icmp_hdr->i_cksum=0 ;
icmp_hdr->i_seq=0 ;
icmp_hdr->timestamp=ts;
datapart=icmp_data+sizeof(icmpheader);
memset(datapart,e,datasize-sizeof(icmpheader));
}
2ushort checksum(ushort*buffer,int size);
//icmp
ushort checksum(ushort*buffer,int size)
{
unsigned long cksum=0 ;
while(size>1)
{
cksum+=*buffer++;
size-=sizeof(ushort);
}
if(size)
{
cksum+=*(uchar*)buffer ;
}
cksum=(cksum>>16)+(cksum&0xffff);
cksum+=(cksum>>16);
return(ushort)(~cksum);
}
3int decode_resp(char*buf,int bytes,struct sockaddr_in*from); //
int decode_resp(char*buf,int bytes,struct sockaddr_in*from) {
ipheader*iphdr ;
icmpheader*icmphdr ;
unsigned short iphdrlen ;
iphdr=(ipheader*)buf ;
iphdrlen=(iphdr->h_len)*4 ;
if(bytes
{
cout<sin_addr)<
windows
ping 2013627
1
1.1 1
1.2 1
1
2.1 rawsocket1
2.2 2
2
3.1 ping 2
3.2 5
3.3 6
8
4.18
4.29
4.313
4.4 ping14
15
5.116
5.216
1. 1
pingpingicmpicmpicmpipicmpip
1. 2
c ping
1pingpingicmp
2-r
3-n
4datasize
5
2.1 rawsocket
pingicmpipipicmprawsocket
icmptcp/ipipipicmppingicmpicmp icmpwindows xpinterneticmp
socketsocketbindlisten
2. 2
2.2.1
ipicmp3-iphdr-icmphdr-ipotionhdripicm pip
2.2.2
windowsping
2.2.3
ping ...
ip4
reply from ...
request timeout ping
3.1 ping
ping()socketicmpicmpicmp ping3.1
1
2ping
1
2 windows pingping
192.168.31.127
3 arp /a arp
arp /d (arp /a)arp
/ano arp entries found
ping ip
arp /sip
arp /sipmac
pingping
pingping
icmpicmp
icmpipicmpip
pingping
tcp/ip
1rawsocket
pingicmpip
ipicmpraw
socket
socketsocketbind
3.
4. 1
ipicmp
5. 2
windowsping
6. 3
ping ...
ip
4
reply from ...
request timeout ping
.
3.1
4
ping.
3.1.1
3.1.2
3.1.3
3.1.4
7. 2
2.2iniping()
getargments()
(user help )
pingping
pingping
2.2
8. 3getargments()
-r-n
datasize()
--r-n
r-r
ipdatasize,
datasize
ip
9. 4ping()
ping()
icmpicmp
icmpicmp
3-iphdr-icmphdr-ipotionhdr
ipicm pip
10. 1ip
typedef struct _iphdr
{
unsigned int h_len:4;
unsigned int version:4;
unsigned char tos;
unsigned short total_len;
unsigned short ident;
unsigned short frag_flags;
unsigned char ttl;
unsigned chor proto;
unsigned short checksum;
unsigned int sourceip;
unsigned int destip;
} ipheader;
h-len:4 : ip32bit
4bit 60
ip20
version:4: ipipv4.
top:
total Clen: ip
ident:
frag-flags:
ttl:
proto: tcpudp
checksum:
sourceip: ip
destip: ip
11. 2
typedef struct Cicmphdr
{
byte i_type;
byte i_code :
ushort i_cksum;
ushort i_id;
ushort i_seq;
ulong timestamp;
} icmpheader;
i_tye :
i_code : icmp
i_cksum:
i_seq: 01. timestamp:
12. 3ip
typedef struct _ipoptionhdr
{
unsigned char code;
unsigned char len;
unsigned char ptr;
unsigned loang addr[9];
} icmpheader;
code: ip 7
len:
ptr: 1ip
展开阅读全文