c语言实现ping程序实验报告,PING实验报告.doc

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

展开阅读全文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值