当前位置:文档之家› 编程实现ping命令

编程实现ping命令

编程实现ping命令
编程实现ping命令

物联网工程学院实验报告

课程名称《计算机网络》实验名称编程实现ping命令实验日期2012- 5 - 1

班级计科姓名学号03040

实验报告要求1.实验名称2.实验要求3.实验环境4.实验步骤(写明实验结果) 5.实验体会

实验3 编程实现ping命令

实验截图:

实验代码:

#pragma pack(4)

#include "winsock2.h"

#include "stdlib.h"

#include "stdio.h"

#define ICMP_ECHO 8

#define ICMP_ECHOREPLY 0

#define ICMP_MIN 8 // minimum 8 byte icmp packet (just header) /* The IP header */

typedef struct iphdr {

unsigned int h_len:4; // length of the header

unsigned int version:4; // Version of IP

unsigned char tos; // Type of service

unsigned short total_len; // total length of the packet

unsigned short ident; // unique identifier

unsigned short frag_and_flags; // flags

unsigned char ttl;

unsigned char proto; // protocol (TCP, UDP etc)

unsigned short checksum; // IP checksum

unsigned int sourceIP;

unsigned int destIP;

}IpHeader;

//

// ICMP header

//

typedef struct icmphdr {

BYTE i_type;

BYTE i_code; /* type sub code */

USHORT i_cksum;

USHORT i_id;

USHORT i_seq;

/* This is not the std header, but we reserve space for time */

ULONG timestamp;

}IcmpHeader;

#define STATUS_FAILED 0xFFFF

#define DEF_PACKET_SIZE 32

#define DEF_PACKET_NUMBER 4 /* 发送数据报的个数*/

#define MAX_PACKET 1024

#define xmalloc(s) HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,(s)) #define xfree(p) HeapFree (GetProcessHeap(),0,(p))

void fill_icmp_data(char *, int);

USHORT checksum(USHORT *, int);

int decode_resp(char *,int ,struct sockaddr_in *);

void Usage(char *progname){

fprintf(stderr,"Usage:\n");

fprintf(stderr,"%s [number of packets] [data_size]\n",progname);

fprintf(stderr,"datasize can be up to 1Kb\n");

ExitProcess(STATUS_FAILED);

}

int main(int argc, char **argv){

WSADATA wsaData;

SOCKET sockRaw;

struct sockaddr_in dest,from;

struct hostent * hp;

int bread,datasize,times;

int fromlen = sizeof(from);

int timeout = 1000;

int statistic = 0; /* 用于统计结果*/

char *dest_ip;

char *icmp_data;

char *recvbuf;

unsigned int addr=0;

USHORT seq_no = 0;

if (WSAStartup(MAKEWORD(2,1),&wsaData) != 0){

fprintf(stderr,"WSAStartup failed: %d\n",GetLastError());

ExitProcess(STATUS_FAILED);

}

if (argc <2 ) {

Usage(argv[0]);

}

sockRaw = WSASocket(AF_INET,SOCK_RAW,IPPROTO_ICMP,NULL, 0,WSA_FLAG_OVERLAPPED); //

//注:为了使用发送接收超时设置(即设置SO_RCVTIMEO, SO_SNDTIMEO),

// 必须将标志位设为WSA_FLAG_OVERLAPPED !

//

if (sockRaw == INVALID_SOCKET) {

fprintf(stderr,"WSASocket() failed: %d\n",WSAGetLastError());

ExitProcess(STATUS_FAILED);

}

bread = setsockopt(sockRaw,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout,

sizeof(timeout));

if(bread == SOCKET_ERROR) {

fprintf(stderr,"failed to set recv timeout: %d\n",WSAGetLastError());

ExitProcess(STATUS_FAILED);

}

timeout = 1000;

bread = setsockopt(sockRaw,SOL_SOCKET,SO_SNDTIMEO,(char*)&timeout,

sizeof(timeout));

if(bread == SOCKET_ERROR) {

fprintf(stderr,"failed to set send timeout: %d\n",WSAGetLastError());

ExitProcess(STATUS_FAILED);

}

memset(&dest,0,sizeof(dest));

hp = gethostbyname(argv[1]);

if (!hp){

addr = inet_addr(argv[1]);

}

if ((!hp) && (addr == INADDR_NONE) ) {

fprintf(stderr,"Unable to resolve %s\n",argv[1]);

ExitProcess(STATUS_FAILED);

}

if (hp != NULL)

memcpy(&(dest.sin_addr),hp->h_addr,hp->h_length);

else

dest.sin_addr.s_addr = addr;

if (hp)

dest.sin_family = hp->h_addrtype;

else

dest.sin_family = AF_INET;

dest_ip = inet_ntoa(dest.sin_addr);

//

// atoi函数原型是: int atoi( const char *string );

// The return value is 0 if the input cannot be converted to an integer !

//

if(argc>2)

{

times=atoi(argv[2]);

if(times == 0)

times=DEF_PACKET_NUMBER;

}

else

times=DEF_PACKET_NUMBER;

if (argc >3)

{

datasize = atoi(argv[3]);

if (datasize == 0)

datasize = DEF_PACKET_SIZE;

if (datasize >1024) /* 用户给出的数据包大小太大*/

{

fprintf(stderr,"WARNING : data_size is too large !\n");

datasize = DEF_PACKET_SIZE;

}

}

else

datasize = DEF_PACKET_SIZE;

datasize += sizeof(IcmpHeader);

icmp_data = (char*)xmalloc(MAX_PACKET);

recvbuf = (char*)xmalloc(MAX_PACKET);

if (!icmp_data) {

fprintf(stderr,"HeapAlloc failed %d\n",GetLastError());

ExitProcess(STATUS_FAILED);

}

memset(icmp_data,0,MAX_PACKET);

fill_icmp_data(icmp_data,datasize);

//

//显示提示信息

//

fprintf(stdout,"\nPinging %s ....\n\n",dest_ip);

for(int i=0;i{

int bwrote;

((IcmpHeader*)icmp_data)->i_cksum = 0;

((IcmpHeader*)icmp_data)->timestamp = GetTickCount();

((IcmpHeader*)icmp_data)->i_seq = seq_no++;

((IcmpHeader*)icmp_data)->i_cksum = checksum((USHORT*)icmp_data,datasize);

bwrote = sendto(sockRaw,icmp_data,datasize,0,(struct sockaddr*)&dest,sizeof(dest));

if (bwrote == SOCKET_ERROR){

if (WSAGetLastError() == WSAETIMEDOUT) {

printf("Request timed out.\n");

continue;

}

fprintf(stderr,"sendto failed: %d\n",WSAGetLastError());

ExitProcess(STATUS_FAILED);

}

if (bwrote < datasize ) {

fprintf(stdout,"Wrote %d bytes\n",bwrote);

}

bread = recvfrom(sockRaw,recvbuf,MAX_PACKET,0,(struct sockaddr*)&from,&fromlen); if (bread == SOCKET_ERROR){

if (WSAGetLastError() == WSAETIMEDOUT) {

printf("Request timed out.\n");

continue;

}

fprintf(stderr,"recvfrom failed: %d\n",WSAGetLastError());

ExitProcess(STATUS_FAILED);

}

if(!decode_resp(recvbuf,bread,&from))

statistic++; /* 成功接收的数目++ */

Sleep(1000);

}

/*

Display the statistic result

*/

fprintf(stdout,"\nPing statistics for %s \n",dest_ip);

fprintf(stdout," Packets: Sent = %d,Received = %d, Lost = %d (%2.0f%% loss)\n",times, statistic,(times-statistic),(float)(times-statistic)/times*100);

WSACleanup();

return 0;

}

/*

The response is an IP packet. We must decode the IP header to locate

the ICMP data

*/

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 ; // number of 32-bit words *4 = bytes if (bytes < iphdrlen + ICMP_MIN) {

printf("Too few bytes from %s\n",inet_ntoa(from->sin_addr));

}

icmphdr = (IcmpHeader*)(buf + iphdrlen);

if (icmphdr->i_type != ICMP_ECHOREPLY) {

fprintf(stderr,"non-echo type %d recvd\n",icmphdr->i_type); return 1;

}

if (icmphdr->i_id != (USHORT)GetCurrentProcessId()) {

fprintf(stderr,"someone else''s packet!\n");

return 1;

}

printf("%d bytes from %s:",bytes, inet_ntoa(from->sin_addr)); printf(" icmp_seq = %d. ",icmphdr->i_seq);

printf(" time: %d ms ",GetTickCount()-icmphdr->timestamp); printf("\n");

return 0;

}

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);

}

/*

Helper function to fill in various stuff in our ICMP request.

*/

void fill_icmp_data(char * icmp_data, int datasize){

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;

datapart = icmp_data + sizeof(IcmpHeader);

//

// Place some junk in the buffer.

//

memset(datapart,''E'', datasize - sizeof(IcmpHeader)); }

教师评价优良中及

格不

教师

签名

Ping程序的设计与实现

Ping程序的设计与实现 Ping的基本实现原理请参考以下文档: https://www.doczj.com/doc/c84312397.html,/view/e0769dc69ec3d5bbfd0a7476.html;https://www.doczj.com/doc/c84312397.html,/view/9ee3583143323968011c9213.html;初学者读代码请先百度: socket(),setsockopt(),HeapAlloc()等函数。 使用说明: 1、找到\Debug\ping.exe (即生成的可执行文件的目录);(Ping是工程名) 2、开始->运行->cmd进入命令提示符模式;

3、cd \Debug\ping.exe;然后输入参数即可。 Ping程序源码(无注释)//Ping.h #define WIN32_LEAN_AND_MEAN #include #include #include #include #include typedef struct tagIP_HEADER{ unsigned int h_len:4; unsigned int ver:4; unsigned char tos; unsigned short total_len; unsigned short ident; unsigned short frag_floags; unsigned char ttl; unsigned char protocol;

unsigned short checksum; unsigned int sourceip; unsigned int destip; }IP_HEADER,*PIP_HEADER; typedef struct tagIP_OPT_HEADER{ unsigned char code; unsigned char len; unsigned char ptr; unsigned long addr[9]; }IP_OPT_HEADER,*PIP_OPT_HEADER; typedef struct tagICMP_HEADER{ unsigned char type; unsigned char code; unsigned short checksum; unsigned short id; unsigned short seq; unsigned long timestamp; }ICMP_HEADER,*PICMP_HEADER; #define DEF_PACKET_SIZE 32 #define MAX_PACKET_SIZE 1024 #define ICMP_ECHO 8 #define ICMP_ECHOREPLY 0 #define IP_RECORD_ROUTER 7 void usageinfo(char *progname); void FillIcmpData(char *icmp_data,int size); USHORT CheckSum(USHORT *buf,int size); void DecodeIcmpHeader(char *buf,int ret,LPSOCKADDR_IN lpSin); void DecodeIpHeader(char *buf,int bytes); //Ping.cpp #include #include"Ping.h" #pragma comment(lib,"ws2_32")

1、ping命令使用详解

1、ping命令使用详解 以上就是怎么ping网速的相关介绍,你可以通过上面的说明了解怎么通过ping命令来检测网速,当然如果你想了解更多ping命令的使用方法,你可以输入ping /?,这时会显示所有有关ping命令的参数,具体如下: 用法: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS] [-r count] [-s count] [[-j host-list] | [-k host-list]] [-w timeout] [-R] [-S srcaddr] [-4] [-6] target_name 选项: -t Ping 指定的主机,直到停止。 若要查看统计信息并继续操作 - 请键入 Control-Break; 若要停止 - 请键入 Control-C。 -a 将地址解析成主机名。 -n count 要发送的回显请求数。 -l size 发送缓冲区大小。 -f 在数据包中设置“不分段”标志(仅适用于 IPv4)。 -i TTL 生存时间。 -v TOS 服务类型(仅适用于 IPv4。该设置已不赞成使用,且 对 IP 标头中的服务字段类型没有任何影响)。 -r count 记录计数跃点的路由(仅适用于 IPv4)。 -s count 计数跃点的时间戳(仅适用于 IPv4)。 -j host-list 与主机列表一起的松散源路由(仅适用于 IPv4)。 -k host-list 与主机列表一起的严格源路由(仅适用于 IPv4)。 -w timeout 等待每次回复的超时时间(毫秒)。 -R 同样使用路由标头测试反向路由(仅适用于 IPv6)。 -S srcaddr 要使用的源地址。 -4 强制使用 IPv4。 -6 强制使用 IPv6。

使用Ethereal观察ping命令的工作过程

使用Ethereal观察ping命令的工作过程 实验目的: 了解嗅探器工具Ethereal的下载和安装方法; 掌握Ethereal的简单使用方法; 了解抓包结果的分析方法。 实验步骤: 复习与ping命令相关的因特网控制报文协议ICMP相关的内容,通过搜索引擎了解什么是嗅探器。 1 自己下载安装并启动Ethereal; 2 打开命令提示符窗口,准备输入要运行的ping命令; 3 单击“Capture”菜单中的“Start”菜单项开始抓包; 4 输入要运行的ping命令及要测试的目标主机的ip地址,等到ping命令的结果完全显示出来后,单击软件中的stop按钮,停止包的抓获; 5 在Ethereal的显示过滤器输入栏中输入“icmp”这时界面上将显示所有包含有Icmp协议的报文段。单击选中相应的数据包,在树形视图面板中看它各层协议首部的详细信息。 6 针对运行结果,深入思考icmp协议的重要作用以及连通测试工具ping的实现原理。问题思考:

1 Ethereal是一款什么样的软件,有什么作用? 2试说明连通测试工具ping的实现原理 注: NBNS协议:网络基本输入/输出系统(NetBIOS – Net Basic Input/Output System) 名称服务器。NetBIOS提供三种不同的服务: 名字服务:名字登记和解析 会话服务:可靠的基于连接的通信 数据包服务:不可靠的无连接通信 DNS: DNS 是域名系统(Domain Name System) 的缩写,它是由解析器和域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。其中域名必须对应一个IP地址,而IP地址不一定有域名。域名系统采用类似目录树的等级结构。域名服务器为客户机/服务器模式中的服务器方,它主要有两种形式:主服务器和转发服务器。将域名映射为IP地址的过程就称为“域名解析”。在Internet上域名与IP地址之间是一对一(或者多对一)的,域名虽然便于人们记忆,但机器之间只能互相认识IP地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,DNS就是进行域名解析的服务器。 ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP 协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

PING命令应用(入门必看)

一、Ping 的基础知识 ping 命令相信大家已经再熟悉不过了,但是能把ping 的功能发挥到最大的人却并不是很多,当然我也并不是说我可以让ping 发挥最大的功能,我也只不过经常用ping 这个工具,也总结了一些小经验,现在和大家分享一下。Ping 是潜水艇人员的专用术语,表示回应的声纳脉冲,在网络中Ping 是一个十分好用的TCP/IP工具。它主要的功能是用来检测网络的连通情况和分析网络速度。Ping有好的善的一面也有恶的一面。先说一下善的一面吧。 上面已经说过Ping 的用途就是用来检测网络的连同情况和分析网络速度,但它是通过什么来显示连通呢?这首先要了解Ping的一些参数和返回信息。 二、Ping命令详解 首先需要打开DOS命令界面,通过点击开始菜单中的“运行”选项,输入“cmd”回车即可打开(如下图)。 按确认键后 我们输入ping/?例出ping以下是PING的一些参数(如图):

下面我和大家讲解一下,每个参数意思和使用。 ping [-t] [-a] [-n count] [-l length] [-f] [-i ttl] [-v tos] [-r count] [-s count] [-j computer-list] | [-k computer-list] [-w timeout] destination-list -t Ping指定的计算机直到中断。 -a 将地址解析为计算机名。 -n count 发送count指定的ECHO数据包数。默认值为4。 -l length 发送包含由length指定的数据量的ECHO数据包。默认为32字节;最大值是65,527。 -f 在数据包中发送"不要分段"标志。数据包就不会被路由上的网关分段。 -i ttl 将"生存时间"字段设置为ttl指定的值。 -v tos 将"服务类型"字段设置为tos指定的值。 -r count 在"记录路由"字段中记录传出和返回数据包的路由。count可以指定最少1台,最多9台计算机。 -s count 指定count指定的跃点数的时间戳。 -j computer-list 利用computer-list指定的计算机列表路由数据包。连续计算机可以被中间网关分隔(路由稀疏源)IP允许的最大数量为9。 -k computer-list 利用computer-list指定的计算机列表路由数据包。连续计算机不能被中间网关分隔(路由严格源)IP允许的最大数量为9。 -w timeout 指定超时间隔,单位为毫秒。 destination-list 指定要ping的远程计算机。 三、如何利用PING命令检查网络连通状态 连通问题是由许多原因引起的,如本地配置错误、远程主机协议失效等,当然还包括设备等造成的故障。首先我们讲一下使用Ping命令的步骤。使用Ping 检查连通性有五个步骤: 1.使用ipconfig/all观察本地网络设置是否正确,如图;

Ping命令大全及使用方法

Ping命令大全及使用方法 2006-12-10 21:24 -- Ping命令大全及使用方法 Ping是潜水艇人员的专用术语,表示回应的声纳脉冲,在网络中Ping 是一个十分好用的TCP/IP 工具。它主要的功能是用来检测网络的连通情况和分析网络速度。 Ping有好的善的一面也有恶的一面。先说一下善的一面吧。上面已经说过Ping的用途就是用来检测网络的连同情况和分析网络速度,但它是通过什么来显示连通呢?这首先要了解Ping的一些参数和返回信息。 以下是PING的一些参数: ping [-t] [-a] [-n count] [-l length] [-f] [-i ttl] [-v tos] [-r count] [-s count] [[-j computer-list] | [-k computer-list]] [-w timeout] destination-list -t Ping 指定的计算机直到中断。 -a 将地址解析为计算机名。 -n count 发送 count 指定的 ECHO 数据包数。默认值为 4。 -l length 发送包含由 length 指定的数据量的 ECHO 数据包。默认为 32 字节;最大值是65,527。 -f 在数据包中发送"不要分段"标志。数据包就不会被路由上的网关分段。 -i ttl 将"生存时间"字段设置为 ttl 指定的值。 -v tos 将"服务类型"字段设置为 tos 指定的值。 -r count 在"记录路由"字段中记录传出和返回数据包的路由。count 可以指定最少 1 台,最多 9 台计算机。 -s count 指定 count 指定的跃点数的时间戳。 -j computer-list 利用 computer-list 指定的计算机列表路由数据包。连续计算机可以被中间网关分隔(路由稀疏源)IP 允许的最大数量为 9。 -k computer-list 利用 computer-list 指定的计算机列表路由数据包。连续计算机不能被中间网关分隔(路由

PING命令作用

1)ping命令:ping命令是用来检查网络是否通畅以及网络连接速度的命令,对于黑客来说ping命令是第一个必须掌握的DOS命令,用Ping 命令就是我们给目标IP地址发一个数据包,再根据返回值来判断目标 主机的存在位置及操作系统等。 下面我们来看看它的常用操作。在命令提示框中输入ping,回车。ping 的命令格式如下 C:\Documents and settings\Administrator\ping Usage: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS] [-r count] [-s count] [[-j host-list] : [-k host-list]] [-w timeout] target_name 在此,我们只掌握一些基本的有用的参数就行了。 -t表示不间断的向目标IP发送数据包,直到我们按ctrl+c强迫其停止为止。如果你使用的是100M的宽带,而目标IP只是56K的小猫(调制解调器)那要不了多久目标IP就会因为接受不了这么多的数据而掉线,一次攻击就这么实现了。(不过现在已经米有什么人用56K的小 猫了) -l定义发送数据包的大小,默认为32字节,最大为65500字节,再结合上面的-t一起使用,有更好的效果。例如ping 125.213.73.120 -l 65500 -t (注:125.213.73.120为目标IP地址,65500为字节大小,可自行改动.)由于目标IP(125.213.73.120)有防火墙,所以我们ping 不进去显示Request timed out我们可以按Ctrl+C让其停止。 -n 定义向目标IP发送数据包的次数,默认为3次。如果-n和-t 一 起使用,则以放在后面的为准。

Ping与IPconfig命令的使用

上机一Ping与IPconfig命令的使用 1.Ping命令 1.1 命令格式 ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS] [-r count] [-s count] [[-j host-list] | [-k host-list]] [-w timeout] [-R] [-S srcaddr] [-4] [-6] target_name 1.2 实验内容 (1)-t参数 该参数的意思是一直用ping命令去测试某个地址或某个服务器,直到用户按Ctrl+C 强制中断。如:ping https://www.doczj.com/doc/c84312397.html, –t。 操作要求:请用该参数去ping某台计算机,并用CTRL+C中断,然后查看Ping的情况。 (2)-a参数 解析计算机NetBios名。如:ping -a 192.168.1.21。 操作要求:请用该参数去Ping某台计算机,并查看该台计算机的NetBios名。 (3)-n count参数 发送count指定的Echo数据包数。在默认情况下,一般都只发送四个数据包,通过这个命令可以自己定义发送的个数,对衡量网络速度很有帮助,比如想测试发送50个数据包的返回的平均时间为多少,最快时间为多少,最慢时间为多少就可以通过以下获知:ping -n 50 202.103.96.68 操作要求:请用该命令测试发送100个数据包到某台计算机的时间。 (4)-l size参数 定义echo数据包大小。在默认的情况下windows的ping发送的数据包大小为32byt,可以自己定义它的大小,但有一个大小的限制,就是最大只能发送65500byt,也许有人会问为什么要限制到65500byt,因为Windows系列的系统都有一个安全漏洞(也许还包括其他系统)就是当向对方一次发送的数据包大于或等于65532时,对方就很有可能当机,所以微软公司为了解决这一安全漏洞于是限制了ping的数据包大小。虽然微软公司已经做了此限制,但这个参数配合其他参数以后危害依然非常强大,比如可以通过配合-t参数来实现一个带有攻击性的命令。 ping -l 500 192.168.1.1 操作要求:请用该参数发送一个自己定义大小的数据包到某台计算机。 (5)-i TTL 参数 指定TTL值在对方的系统里停留的时间。此参数同样是帮助检查网络运转情况的。 (6)-r count 参数 在“记录路由”字段中记录传出和返回数据包的路由。在一般情况下发送的数据包是通过一个个路由才到达对方的,但到底是经过了哪些路由呢?通过此参数就可以设定想探测经过的路由的个数,不过限制在了9个,也就是说只能跟踪到9个路由,如: ping -n 1 -r 9 202.96.105.101 (发送一个数据包,最多记录9个路由) 操作要求:请用该参数去Ping某台计算机,并指经过的路由数。

课程设计---Ping程序设计与实现

课程设计 课程名称____计算机网络_____ 题目名称_Ping程序设计与实现 学生学院____计算机学院____ 专业班级____08计科4班___ 学号_______ 2011年 1 月8 日

一、课程设计目的 本次课程设计的目的旨在通过网络相关程序的编写,使我们能深入理解TCP/IP协议机制,以及初步掌握基于Winsocket的网络编程技术。同时巩固相关的理论知识,为以后程序开发打下良好而又坚实的基础。 二、知识准备 1、ICMP协议 互联网控制信息协议(Internet CONTROL Message Protocol),用于错误报告和调试。该协议是TCP/IP协议集中的一个子协议,属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。我们可以通过Ping命令发送ICMP回应请求消息并记录收到ICMP回应回复消息,通过这些消息来对网络或主机的故障提供参考依据。 常见ICMP报文有响应请求报文,目标不可到达、源抑制和超时报文,此外还有时间戳报文。2、Ping工作原理 Ping的原理就是首先建立通道,然后发送包,对方接受后返回信息,这个包至少包括以下内容:发送的时候,包的内容包括对方的ip地址和自己的地址,还有序列数;回送的时候包括双方地址,还有时间等,主要是接受方在都是在操作系统内核里做好的,时刻在监听。Ping程序生成一个icmp“回送请求”,将其发送给目的主机。通过检测是否可以收到目标主机的应答,便可以知道网络的连通性。 (3) Tracert 工作原理 透过向目标发送不同 IP 生存时间 (TTL) 值的ICMP回应数据包,Tracert 诊断程序确定到目标所采取的路由。要求路径上的每个路由器在转发数据包之前至少将数据包上的 TTL 递减 1。数据包上的 TTL 减为 0 时,路由器应该将“ICMP已超时”的消息发回源系统。Tracert 先发送 TTL 为 1 的响应数据包,并在随后的每次发送过程将 TTL 递增1,直到目标响应或 TTL 达到最大值,从而确定路由。透过检查中间路由器发回的“ICMP已超时”的消息确定路由。 三、界面设计及数据结构的说明 1 、MFC界面设计建立流程 步骤一:打开VC6.0,点击文件选项,在project选项卡中选择MFC Appwizard(exe),项目名称为ping。

Ping命令源代码

ping的原理就是首先建立通道,然后发送包,对方接受后返回信息,这个包至少包括以下内容,发送的时候,包的内容包括对方的ip地址和自己的地址,还有序列数,回送的时候包括双方地址,还有时间等,主要是接受方在都是在操作系统内核里做好的,时刻在监听,提供一段c程序的代码,希望对大家有用。 #include #include #include #include #include #include #include #include #include #include #include #include #define PACKET_SIZE 4096 #define MAX_WAIT_TIME 5 #define MAX_NO_PACKETS 3 char sendpacket[PACKET_SIZE]; char recvpacket[PACKET_SIZE]; int sockfd,datalen=56; int nsend=0,nreceived=0; struct sockaddr_in dest_addr; pid_t pid; struct sockaddr_in from; struct timeval tvrecv; void statistics(int signo); unsigned short cal_chksum(unsigned short *addr,int len); int pack(int pack_no); void send_packet(void); void recv_packet(void); int unpack(char *buf,int len);

PING命令使用方法详解

PING命令使用方法详解 PING命令的功能是验证本地计算机与远程计算机(或者是局域网内的计算机)的连接。该命令只有在安装了TCP/IP协议后才可以使用。 依次单击“开始”→“运行”,弹出“运行”对话框,在窗口中输入“CMD”,打开命令行窗口,在命令中输入“ping /?”得到PING命令用法帮助如下: Usage: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS][-r count] [-s count] [[-j host-list] | [-k host-list]] [-w timeout] target_name Options: -t Ping the specified host until stopped. To see statistics and continue - type Control-Break; To stop - type Control-C. -a Resolve addresses to hostnames. -n count Number of echo requests to send. -l size Send buffer size. -f Set Don't Fragment flag in packet. -i TTL Time To Live. -v TOS Type Of Service. -r count Record route for count hops. -s count Timestamp for count hops. -j host-list Loose source route along host-list. -k host-list Strict source route along host-list. -w timeout Timeout in milliseconds to wait for each reply. Ping命令参数中文含义如下: -t Ping 指定的计算机直到中断。 -a 将地址解析为计算机名。 -n count 发送count指定的ECHO数据包数。默认值为4。 -l size 发送包含由size指定的数据量的ECHO数据包。默认为32字节,可选值为65,527 -f 在数据包中发送“不要分段”标志。数据包就不会被路由上的网关分段 -i TTL 将“生存时间”字段设置为TTL指定的值。 -v TOS 将“服务类型”字段设置为TOS指定的值。 -r count 在“记录路由”字段中记录传出和返回数据包的路由。Count可以指定最少1台,最多9台计算机。 -s count 指定count指定的跃点的时间戳。 -j host-list 利用host-list指定的计算机列表路由数据包。连续计算机可以被中间网关分隔IP允许的最大数量为9。 -k host-list 利用host-list指定的计算机列表路由数据包。连续计算机不能被中间网关分隔IP允许的最大数量为9。 -w timeout 指定超时间隔,单位为毫秒。 Ping命令用法举例: 1、Ping IP址 依次单击“开始”→“运行”,弹出“运行”对话框,在窗口中输入“CMD”,打开命令行

计算机网络实验之Ping程序的设计与实现

课程名称计算机网络 实验序号实验五 实验项目Ping程序的设计与实现

2017年03月25 日 实验报告要求 1、实验报告封面填表说明(每份实验报告必须附上封面) (1)课程名称:要求与实验大纲和实验指导书中的课程名称一致。 (2)实验序号:指该课程的第几个实验。 (3)实验项目:要求与实验大纲和实验指导书中的实验项目一致。 (4)实验地点:填写完成该实验项目所在的实验室名称。 (5)实验学时:要求与实验大纲和实验指导书中完成该实验项目所需学时一致。 (6)实验类型:是指演示性、操作性、验证性、综合性、设计性。 演示性:教师操作,学生观察,验证理论、说明原理和方法。 操作性:学生按要求动手拆装、调试实验装置或上机操作,掌握其基本原理和方法。 验证性:按实验指导书(教材)要求,由学生通过操作验证所学理论,加深对理论、知识的理解,掌握基本实验知识、方法、技能、数据处理等。 综合性:实验内容涉及本课程的综合知识或相关课程的知识,运用多的知识、多种方法,按要求或自拟实验方案进行实验。主要培养学生综合运用所学知识、实验方法和实验技能,以培养其分析、解决问题的能力。 设计性:给定实验目的、要求和实验条件,学生自己设计实验方案并加以实现的实验。学生独立完成从查阅资料、拟定实验方案、实验方法和步骤(或系统分析和设计)、选择仪器设备(或自行设计缺制作)进行实验并完成实验全过程,形成实验报告,培养学生自主实验的能力。 (1)批改:全部批改及更正错误。 (2)评分:按百分制评分,不能评分为“优、良、中、差”或“A、B、C”。 (3)签名及批改日期:任课教师必须在每份学生实验报告中签名和写上批改日期。 (4)成绩:填写学生实验成绩表,实验成绩作为考试成绩评定的依据。

ping的过程及原理

同一网段的两台PC 经一台交换机的数据流分析过程 (2010-04-01 16:08:19) 转载 标签: it 分类: 计算机网络 1. A 发“ARP 请求”请求IP 地址为19 2.168.2.7的设备的MAC 地址(广播) 2. A 的为请求经过交换机C, C 学习,记录A 的MAC 地址,再泛洪 3. B 对C(还是A ?)进行ARP 应答(单播) 4. C 学习,记录B 的MAC 地址,并把B 的MAC 地址转发给A 5 A 封装数据帧并发给C 6. C 接收,查MAC 表,解封数据帧,查出目的MAC(B)所对应的端口,重新封装,再转发给B //在这里 交换机不会解封装数据帧和重新封装数据帧,它读出目的MAC 后就直接查找MAC 表转发数据了!! 7. B 接收,解封装 8. B 封装另一数据帧(收到确认信息)发送给C 9. C 接收,解封装,查出目的MAC (A )所对应的端口,重新封装,转发给A //在这里交换机不会解封装数据帧和重新封装数据帧,它读出目的MAC 后就直接查找MAC 表转发数据了!! 10. A 接收,解封装。 疑问:1)此分析中第3步B 是对C 还是A 进行ARP 应答?这里只有A 发了ARP 请求,“请求”与”应答” 应该是对应的吧, 回答:ARP 是谁发的,就对谁应答。所以说肯定是B 对A 应答咯~

两台不同网段的PC 经一路由的数据流分析过程 (2010-04-01 16:25:41) 转载 标签: it 分类: 计算机网络 1. A 发ARP 请求(广播),请求IP 地址为19 2.168.2.5(?是怎么知道C 的MAC 地址的,A 的网关?) 的MAC 地址//就是通过ARP 知道的啊,你不是自己写了么? 2. 路由器发ARP 应答给A,并更新自己的ARP 表项(记录A 的MAC 地址) 3. A 封装数据帧发送给C 4. 路由器接收,解封装,目标IP 非己,查找路由表,无目标信息 5. 路由器发ARP 请求(广播),请求IP 地址为192.168.3.7的MAC 地址 6. B 发ARP 应答给路由器(单播),并存下路由器端口D 的MAC 地址,更新自己的ARP 缓存 7. 路由器重新封装数据帧发送给B 8. B 接收并解封装处理 9. B 封装另一数据帧(收到确认信息)发送给端口D 10. 路由器接收,解封装,目标IP 非己,查找自己的ARP 表项,找到目标所对应的端口号及MAC 地址 11. 路由器重新封装数据帧发送给A 12. A 接收,解封处理

ping命令的用法大全

ping命令的用法大全! 1)如何查看本机所开端口: 用netstat -an命令查看!再stat下面有一些英文,我来简单说一下这些英文具体都代表什么~ LISTEN:侦听来自远方的TCP端口的连接请求 SYN-SENT:再发送连接请求后等待匹配的连接请求 SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认 ESTABLISHED:代表一个打开的连接 FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认 FIN-WAIT-2:从远程TCP等待连接中断请求 CLOSE-WAIT:等待从本地用户发来的连接中断请求 CLOSING:等待远程TCP对连接中断的确认 LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认 TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认 CLOSED:没有任何连接状态 ××××××××××××××××××××××××××××××××××××××××××××× 2)如何获得一个IP地址的主机名? 利用ping -a ip 命令查看!再第一行的pinging后面的『ip』前面的英文就是对方主机名! 同样道理,利用ping machine_name也可以得到对方的ip 获得一个网站的ip地址的方法是:ping https://www.doczj.com/doc/c84312397.html, 比如想知道sohu的ip,就用ping https://www.doczj.com/doc/c84312397.html,来查看就可以了~ 顺便说一句:如果返回:Reply from *.*.*.*: TTL expired in transit的话,呵呵,代表TTL(生命周期)在传输过程中过期 什么意思呢?我来解释一下! 导致这个问题出现的原因有两个:1)TTL值太小!TTL值小于你和对方主机之间经过的路由器数目。2)路由器数量太多,经过路由器的数量大于TTL值! 呵呵,其实这两点是一个意思!只不过说法不同而已! ××××××××××××××××××××××××××××××××××××××××××××× 3)如何查看本机的ip地址? 用ipconfig来查看就可以! 也可以再Windows中的开始菜单,运行中输入winipcfg,同样可以看到自己的ip

ping命令详解图文

p i n g命令详解图文集团标准化工作小组 [Q8QX9QT-X8QQB8Q8-NQ8QJ8-M8QMN]

Ping 1、P ing的基础知识 Ping 是一个十分好用的TCP/IP工具。 [功能] 用来检测网络的连通情况和分析网络速度 2、P ing命令详解 参数意思和使用。 -t Ping指定的计算机直到中断。 -a 将地址解析为计算机名。 -n count 发送 count 指定的 ECHO 数据包数。默认值为 4。 -l length 发送包含由 length 指定的数据量的 ECHO 数据包。默认为 32 字节;最大值是65,527。

-f 在数据包中发送"不要分段"标志。数据包就不会被路由上 的网关分段。 -i ttl 将"生存时间"字段设置为 ttl 指定的值。 -v tos 将"服务类型"字段设置为 tos 指定的值。 -r count 在"记录路由"字段中记录传出和返回数据包的路由。 count 可以指定最少 1 台,最多 9 台计算机。 -s count 指定 count 指定的跃点数的时间戳。 -j computer-list 利用 computer-list 指定的计算机列表路由数据包。连 续计算机可以被中间网关分隔(路由稀疏源)IP 允许的 最大数量为 9。 -k computer-list 利用 computer-list 指定的计算机列表路由数据包。连 续计算机不能被中间网关分隔(路由严格源)IP 允许的 最大数量为 9。 -w timeout 指定超时间隔,单位为毫秒。 destination-list 指定要 ping 的远程计算机

Ping命令全解

Ping命令全解 用于Windows下的Ping指令相信大家已经再熟悉不过了,但是能把Ping的功能发挥到最大的人却并不是很多。这里,我们参照Ping指令的辅助说明来给大家讲讲使用Ping时会用到的技巧(Ping只有在安装了TCP/IP通讯协议以后才可以使用): Ping [-t] [-a] [-n count] [-l length] [-f] [-i ttl] [-v tos] [-r count] [-s count] [[-j computer-list] | [-k computer-list]] [-w timeout] destination-list 下面我们对其参数进行解释: -t Ping the specified host until stopped.To see statistics and continue - type Control-Break;To stop - type Control-C. 不停的Ping地方主机,直到你按下Ctrl+C。 此功能没有什么特别的技巧,不过可以配合其他参数使用,这将在下面提到。 -a Resolve addresses to hostnames. 解析计算机NetBIOS名。 例:C:\>Ping -a 192.168.1.21 Pinging https://www.doczj.com/doc/c84312397.html, [192.168.1.21] with 32 bytes of data: Reply from 192.168.1.21: bytes=32 time<10ms TTL=254 Reply from 192.168.1.21: bytes=32 time<10ms TTL=254 Reply from 192.168.1.21: bytes=32 time<10ms TTL=254 Reply from 192.168.1.21: bytes=32 time<10ms TTL=254 Ping statistics for 192.168.1.21: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms 从上面就可以知道IP为192.168.1.21的计算机NetBIOS名为https://www.doczj.com/doc/c84312397.html,。 -n count Number of echo requests to send. 发送count指定的Echo数据包数。 在默认情况下,一般都只发送四个数据包,通过这个命令可以自己定义发送的个数,对衡量网络速度很有帮助,比如我们想测试发送50个数据包的返回的平均时间为多少,最快时间为多少,最慢时间为多少就可以通过以下得知: C:\>Ping -n 50 202.103.96.68 Pinging 202.103.96.68 with 32 bytes of data: Reply from 202.103.96.68: bytes=32 time=50ms TTL=241 Reply from 202.103.96.68: bytes=32 time=50ms TTL=241 Reply from 202.103.96.68: bytes=32 time=50ms TTL=241 Request timed out. ……………… Reply from 202.103.96.68: bytes=32 time=50ms TTL=241 Reply from 202.103.96.68: bytes=32 time=50ms TTL=241 Ping statistics for 202.103.96.68: Packets: Sent = 50, Received = 48, Lost = 2 (4% loss),Approximate round trip times in milli-seconds: Minimum = 40ms, Maximum = 51ms, Average = 46ms

Ping命令的使用大全

Ping命令的使用大全 “Ping”命令是我们在判断网络故障常用的命令,但您真正明白这个命令运行后会发生什么,以及出现的各种信息说明了什么吗?其实熟练的掌握Ping命令的各种技巧可以帮助你解决很多网络故障。下面我们就来详细的了解一下Ping命令。 工具/原料 windows 自带 步骤/方法 1.它是用来检查网络是否通畅或者网络连接速度的命令。作为一个生活 在网络上的管理员或者黑客来说,ping命令是第一个必须掌握的DOS命 令,它所利用的原理是这样的:网络上的机器都有唯一确定的IP地址,我们给目标IP地址发送一个数据包,对方就要返回一个同样大小的数据包,根据返回的数据包我们可以确定目标主机的存在,可以初步判断目标主机的操作系统等。下面就来看看它的一些常用的操作。先看看帮助吧,在 DOS窗口中键入:ping /? 回车,出现如图1所示的帮助画面。 图1 在此,我们只掌握一些基本的很有用的参数就可以了. -t 表示将不间断向目标IP发送数据包,直到我们强迫其停止。试想,如果你使用100M的宽带接入,而目标IP是56K的小猫,那么要不了多久,目标IP就因为承受不了这么多的数据而掉线,呵呵,一次攻击就这么简 单的实现了。 -l 定义发送数据包的大小,默认为32字节,我们利用它可以最大定义到65500字节。结合上面介绍的-t参数一起使用,会有更好的效果哦。

-n 定义向目标IP发送数据包的次数,默认为3次。如果网络速度比较慢,3次对我们来说也浪费了不少时间,因为现在我们的目的仅仅是判断目标IP是否存在,那么就定义为一次吧。说明一下,如果-t 参数和 -n 参数一起使用,ping命令就以放在后面的参数为标准,比如“ping IP -t -n 3”,虽然使用了-t参数,但并不是一直ping下去,而是只ping 3次。另外,ping命令不一定非得ping IP,也可以直接ping主机域名,这样就可以得到主机的IP。 下面我们举个例子来说明具体用法,如图2。 这里 time=2表示从发出数据包到接受到返回数据包所用的时间是2秒,从这里可以判断网络连接速度的大小。从TTL的返回值可以初步判断被ping 主机的操作系统,之所以说“初步判断”是因为这个值是可以修改的。这里TTL=32表示操作系统可能是win98。 2.ping命令使用举例 ①ping 自己机器的例子 ping本机的IP地址,此例中本机的IP地址为:“10.1.1.253” 图3上图是ping通的情况 ②ping网关/路由器的例子(图4) ping网关/路由器的IP地址,此例中网关/路由器的IP地址为: “10.1.1.254”

PING命令入门详解及应用举例

PING 命令详解及应用举例 一、Ping 的基础知识 ping 命令相信大家已经再熟悉不过了,但是能把ping 的功能发挥到最大的人却并不是很多,当然我也并不是说我可以让ping 发挥最大的功能,我也只不过经常用ping 这个工具,也总结了一些小经验,现在和大家分享一下。Ping 是潜水艇人员的专用术语,表示回应的声纳脉冲,在网络中Ping 是一个十分好用的TCP/IP 工具。它主要的功能是用来检测网络的连通情况和分析网络速度。Ping 有好的善的一面也有恶的一面。先说一下善的一面吧。 上面已经说过Ping 的用途就是用来检测网络的连同情况和分析网络速度,但它是通过什么来显示连通呢?这首先要了解Ping 的一些参数和返回信息。二、Ping 命令详解 首先需要打开DOS 命令界面,通过点击开始菜单中的“运行”选项,输入“cmd 回车即可打开(如下图)。 回车后 我们输入ping /? 例出ping 以下是PING 的一些参数(如图):

下面我和大家讲解一下,每个参数意思和使用。 ping [-t] [-a] [-n count] [-l length] [-f] [-i ttl] [-v tos] [-r count] [-s count] [-j computer-list] | [-k computer-list] [-w timeout] destination-list -t Ping 指 定的计算机直到中断。 -a 将地址解析为计算机名。 -n count 发送coun t 指定的ECHO 数据包数。默认值为4。 -l length 发送包含由length 指定的数据量的ECHO 数据包。默认为32 字节;最大值是65,527。 -f 在数据包中发送"不要分段"标志。数据包就不会被路由上的网关分段。 -i ttl 将"生存时间"字段设置为ttl 指定的值。 -v tos 将"服务类型"字段设置为tos 指定的值。 -r count 在"记录路由"字段中记录传出和返回数据包的路由。count 可以指定最少1 台,最多9 台计算机。 -s count 指定count 指定的跃点数的时间戳。 -j computer- list 利用computer-list 指定的计算机列表路由数据包。连续计算机可以被中间网关分隔(路由稀疏源)IP 允许的最大数量为9。 -k computer- list 利用computer-list 指定的计算机列表路由数据包。连续计算机不能被中间网关分隔(路由严格源)IP 允许的最大数量为9。 -w timeout 指定超时间隔,单位为毫秒。 destination-li st 指定要ping 的远程计算机。 三、如何利用PING 命令检查网络连通状态:★★★★★ 连通问题是由许多原因引起的,如本地配置错误、远程主机协议失效等,当然还包括设备等造成的故障。首先我们讲一下使用Ping 命令的步骤。使用Ping 检查连通性有五个步骤: 1. 使用ipconfig /all 观察本地网络设置是否正确,如图; 2. Ping 127.0.0.1,127.0.0.1 回送地址Ping 回送地址是为了检查本地的TCP/IP

相关主题
文本预览
相关文档 最新文档