当前位置:文档之家› 网络编程—Traceroute程序实例

网络编程—Traceroute程序实例

网络编程—Traceroute程序实例
网络编程—Traceroute程序实例

目录

目录 (1)

1. 问题描述 (2)

2. 需求分析 (2)

3. 系统设计 (2)

3.1. 概要设计 (2)

3.2. 详细设计 (4)

3.2.1. Traceroute的实现原理 (4)

4. 调试 (6)

5. 总结 (7)

6. 附录 (8)

7. 参考文献 (13)

8. 设计评语 (14)

1.问题描述

本次课程设计,我们小组选择了课外的题目,经过讨论,最终我们决定我们小组的课题为:网络编程——Traceroute程序的应用。

Traceroute(路由追踪)是一个非常有用的网络工具。在命令提示符下,执行Traceroute 程序,输入必要的参数后即可探测出到达网络中任何一台目标主机中途需要经过哪些路由器以及每个路由器的信息,比如IP地址等。在网络中进行多播通信或者遇到路由问题时,Traceroute获得的信息就非常有用。

2.需求分析

路由是把信息从源穿过网络传递到目的地的行为,在传输过程中,遇到一系列的中间节点。这些中间节点构成了路由跟踪的依据。路由的话题早已在计算机界出现,但直到八十年代中期才获得商业成功,这一时间延迟的主要原因是七十年代的网络很简单,后来大型的网络才较为普遍。而路由跟踪是在路由的基础上提出的问题,是利用路由跟踪实用程序于确定 IP 数据报访问目标所采取的路径。当我们不能通过网络访问目的设备时,网络运行者就需要判断是哪里出了问题。问题不仅仅会出现在最终目的设备,也可能出现在转发数据包的中间路由器。解决方法是,了解了 IP 数据报访问目标所采取的路径,将发现网络布网简单拓扑,确定路由断点即可解决网络故障。操作系统中的tracert 或traceroute 路由跟踪程序,通过它可以查看到达目标地址所经过的路径。它的作用与 ping 有类似之处,使用 ping 可以检查是否连接,如果不通,一般不好准确判断哪一个节点出错,而使用 tracert 则可以准确判断出错的部分。路由跟踪程序随着网络的发展而发展,现已经较为成熟,不仅在操作系统上有路由跟踪程序,在中间设备也加入路由跟踪程序,如 cisco 扩展路由跟踪程序,提供详细的参数选择。单、多线程路由跟踪程序都已经面世,实现方式也各不相同,如基于记录路由选项的,基于 UDP,基于 ICMP Echo Request 的路由探测。本课题主要基于UDP协议的路由探测方法。

系统实现路由的跟踪,每经过一个路由,要求得到经过该路由节点的地址,也就是说输入目标信息,可以得到本地主机到目标经过的所有中间节点。这些中间节点用 IP 地址标识。并要求对跟踪跳数,每一跳等待时间可控。为了让系统更加完善,首先要测试目标的连通性,系统中也要实现目标探测功能,即Ping 功能。

3.系统设计

3.1.概要设计

本次编写的Traceroute程序编写环境为在Linux系统下使用C语言进行编写。当完成编写后,使用gcc编译工具进行编译,测试无误后再次使用arm-linux-gcc进行编译,移植入开发板进行测试。

由于Traceroute程序的运行需要有真实的网络环境,需要根据所需的环境来搭建并且配置路由器,在当前条件下,我们小组使用了Dynamips模拟器。

实验所需的拓扑图如下:

当在Linux系统下运行经过编译的Traceroute程序并输入需要进行追踪的IP 地址,程序会显示出到达目标主机所经过的每一个路由器。

Linux系统网络属性配置

配置好linux系统中的网络属性,将IP地址设置为与R4同一网段,网关设置为10.0.0.1,即R4,运行经过编译的Traceroute程序并输入需要进行追踪的IP地址,程序会显示出到达目标主机所经过的每一个路由器。(详见测试结果)

3.2.详细设计

3.2.1.Traceroute的实现原理

Traceroute程序的实现主要涉及IP头部生存时间(time to live,TTL)字段的使用。

设置TTL字段的目的是防止数据报由于选路错误或其他软硬件原因从而导致在网络中无休止的流动,它指定了数据报的生存时间。TTL的初始值由源主机设置,当一份数据报经过路由器时,处理该数据报的路由器都需要把TTL值减去数据报在路由器中停留的秒数。但事实上大多数路由器只是简单地将TTL值减1,因此TTL字段最终被实现为一个跳站计数器。当TTL字段的值被减为0时,路由器就不会转发该数据报,而是将其丢弃,并产生一份ICMP超时差错报文发往源主机以通知错误的发生。Traceroute程序的关键就在于返回的这份ICMP超时差错报文的源地址就是途径路由器的IP地址。由此,通过一次递增TTL字段的值,就可以得到一份数据报在其传输路径上所经过的路由信息。

Traceroute程序在具体实现时,是令其向目的主机发送一个UDP数据包,并重复递增IP头部TTL字段的值。刚开始的时候TTL等于1,这样当该数据包抵达途中的第一个路由器时,TTL的值就被减为0,导致发送超时错误,因此该路由器会返回一个ICMP超时数据包到源主机。随后,主机将数据包的TTL值递增1,以便IP报文能传递到下一个路由器,下一个路由器将会生成ICMP超时数据包返回给源主机。依此类推,将返回的每一条ICMP超时消息都收集下来,便能知道中途都经过哪些路由器,直到最后到达目标主机。当TTL值递增的足够大,可达到目标主机的时候,便会返回一条ICMP“端口无法访问”的信息,因为目标主机没有在相应端口等待的进程。至此,Traceroute整个流程便完成了。

实现Traceroute程序是可以采取一个简便的方法。只需将封装好的ICMP 数据包发送到目标主机,TTL值初始化为1,此后每次发送的数据包都递增1,在TTL值减为0超时的时候,也会返回一条ICMP错误消息。程序中只需要一个ICMP类型的原始套接字即可实现。

开始

超时,显示超时信息

解析数据报并显示输出

有预期数据报? 使用UDP 协议创建原始UDP 包

TTL ++(初始为1)

目的主机回应答或达到最大跳站有数据报到达? 填充UDP 数据包并发送

释放各种资源打印结果信息

结束

Y

N Y Y

N

N

4.调试

对编写好的代码进行编译

执行编译过后的程序,输入参数

运行程序,并输入参数:10.0.0.1,即追踪到目标主机为R1所经过的路由。根据程序运行结果,我们可以发现,在存在冗余链路存在的情况下,目标主机为R1所经过的路由器分别依次为:R4->R5->R3->R2->R1,而不是跳数更加少,距离更加短的R4->R3->R2->R1。分析其原因,在同时存在R4->R5->R3->R2->R1和R4->R3->R2->R1两条链路的情况下,因为R3、R4、R5之间的物理连接均通过FastEthernet(高速以太口)相连,而非R1、R2、R3、R4之间使用的Serial 接口。两者相比,FastEthernet接口的出口代价远远小于Serial接口,因此运行在路由器上的EIGRP路由协议自动选择了链路中代价较小的一条链路。若此时断开R4->R5->R3这条链路,则追踪到达R1的路由应为R4->R3->R2->R1。

当第二次对程序进行测试时,我们将R4的F0/1口手工关闭,即断开R4->R5->R3,并观察结果。

对路由器R4的F0/1口执行关闭操作

断开R4、R5、R3后追踪10.0.0.1的结果

观察实验结果,我们发现追踪R1的路由时,途径的路由器为R4->R3->R2->R1,与我们测试前的预期相同。

第三次测试时,我们选择的参数为一条网络中没有的地址,并观察结果。

追踪网络中不存在的地址

根据实验结果,当输入的参数为网络中不存在的地址时,程序显示出的下一条将永远为40.0.0.1,即R4。分析其原因,由于在设置linux系统中网卡属性时,手工配置了与R4同一网段的IP地址,并且将默认网关设置为10.0.0.1,即R4。因此在linux系统中,所有可以到达的地址皆由R4提供。而R4的路由表中并没有100.0.0.1的路由条目,因此该地址不可达,发送至100.0.0.1的任何数据包将在R4停留,直至存活时间为0后被丢弃。

5.总结

经过两个礼拜的努力,本课程设计基本完成预定功能。本文从Linux与嵌入式系统中对于网络底层编程的角度说明路由跟踪系统的开发过程。在设计初期,我组为了设计出一个功能较为完整,在嵌入式Linux上实现网络的底层开发,我们通过查看了有关书籍和互联网,结合老师的意见和建议,最终确定本设计现有功能模块。在设计中,我们遇到许多技术上的问题,但通过查阅资料、网上论坛答疑、请教老师同学等各种方式,问题最终还是得到解决。

由于时间和我组水平关系,设计中开发的功能还存在一些不足,比如路由器的模拟器只能运行在x86机器中而无法在ARM的处理器中运作。从整体来看,本课程设计还是有成功

的一面,它实现了路由的跟踪,每经过一个路由,要求得到经过该路由节点的地址,也就是说输入目标信息,可以得到本地主机到目标经过的所有中间节点。

6.附录

代码:

/******************************************************************** *********

Internet路由跟踪程序Traceroute

该程序使用UDP包发送一个试探数据报,连续递增改变数据报头的TTL值。TTL每一次“超

时”,都会向我们返回一条ICMP消息(传输超时错误或目的端口不可到达错误),我们只

要查看给我们发送ICMP消息的主机地址,即可知道该数据报经过了哪些主机(路由器)。

程序中使用了两个套接字,一个是普通的UDP数据报套接字,用IP_TTL 选项来改变发送时的

TTL值;另一个是原始套接字,用于接收返回来的ICMP消息。

********************************************************************* *********/

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define MAXPACKET 65535 /* IP包的最大大小*/

#define UDPPACKETSIZE 36 /* UDP数据报的大小*/

#define SRCPORT 23156 /*UDP包的源端口*/

#define DSTPORT 58127 /*UDP包的目的端口*/

/*函数声明*/

double deltaT(struct timeval *t1p,struct timeval *t2p); /*计算时间差*/

int check_packet(u_char *buf,int cc); /*检查一个IP包是否期望的ICMP数据报*/ void send_probe(int sndsock,struct sockaddr_in *whereto,int ttl); /*发送一个探测包*/

/*接收ICMP消息*/

int wait_for_reply(int rcvsock,struct sockaddr_in *from,char *databuf,int buflen);

/*主函数*/

int main(int argc,char * argv[])

{

const int max_ttl=48; /*默认的最大跳数*/

const int nprobes=3; /*默认的每跳探测次数*/

//处理命令行,合法的命令行格式为:tracert 主机名或主机IP地址*/

if(argc!=2) {

fprintf(stderr,"Usage: %s host\r\n",argv[0]);

exit(-1);

}

struct hostent *host; /*主机名结构指针*/

struct sockaddr_in haddr; /*远程主机地址结构*/

struct sockaddr_in loc_addr; /*本机地址结构,用于绑定UDP服务于指定的端口*/

bzero(&haddr,sizeof(haddr));

/*填充目的主机地址结构*/

haddr.sin_family=AF_INET;

haddr.sin_addr.s_addr=inet_addr(argv[1]);

haddr.sin_port=htons(DSTPORT);

/*如果是主机名,则查询DNS解析*/

if(haddr.sin_addr.s_addr==INADDR_NONE){

if(NULL==(host=gethostbyname(argv[1]))) {

fprintf(stderr,"unknown host %s\r\n",argv[1]);

exit(-1);

}

memcpy(&haddr.sin_addr,host->h_addr,host->h_length);

}

/*填充本机地址结构*/

loc_addr.sin_family=AF_INET;

loc_addr.sin_addr.s_addr=htonl(INADDR_ANY);

loc_addr.sin_port=htons(SRCPORT);

int sndsock,rcvsock;

/*创建UDP套接字*/

if ((sndsock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {

fprintf(stderr,"traceroute: udp socket\r\n");

exit(-1);

}

/*创建RAW套接字,套接字的类型为IPPROTO_ICMP*/

if ((rcvsock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)) < 0) { fprintf(stderr,"traceroute: raw socket\r\n");

exit(-1);

}

/*绑定UDP套接字于指定的端口*/

if(bind(sndsock,(struct sockaddr*)&loc_addr,sizeof(loc_addr))) {

fprintf(stderr,"bind error\r\n");

exit(-1);

}

fprintf(stdout, "traceroute to %s (%s)", argv[1],inet_ntoa(haddr.sin_addr));

fprintf(stdout, ", %d hops max, %d byte packets\r\n", max_ttl,

UDPPACKETSIZE+sizeof(struct ip)+sizeof(struct udphdr));

char databuf[MAXPACKET]; /*接收ICMP数据报的缓冲区*/

struct sockaddr_in from; /*远程主机地址结构*/

int ttl;

//循环改变发送的UDP数据报的TTL值,发送探测数据包*/

for (ttl = 1; ttl <= max_ttl; ++ttl) {

u_long lastaddr = 0; /*记录上一个接收到的数据包的源地址*/

int got_there = 0; /*记录是否到达了目的主机*/

printf("%2d ", ttl);

fflush(stdout);

int probe;

/*每一跳(TTL值)循环发送nprobes个数据包*/

for (probe = 0; probe < nprobes; ++probe) {

int cc=0;

struct timeval t1, t2; /*记录发送和接收的时间*/

struct timezone tz;

struct ip *ip;

gettimeofday(&t1, &tz); /*记录发送时间*/

send_probe(sndsock,&haddr,ttl); /*发送一个UDP数据包*/

/*在指定的时间内等待回复的ICMP包,直到超时*/

while (cc = wait_for_reply(rcvsock, &from,databuf,sizeof(databuf))) { gettimeofday(&t2, &tz); /*记录接收时间*/

if (check_packet(databuf, cc)) { /*检查是否期待的ICMP数据报*/

/*判断是否是上一跳主机返回的数据包,不是的话输出其IP 地址*/

if (from.sin_addr.s_addr != lastaddr) {

printf("%s ",inet_ntoa(from.sin_addr));

lastaddr = from.sin_addr.s_addr;

}

/*计算发送和接收数据包之间的间隔,并显示出来*/

printf(" %g ms ", deltaT(&t1, &t2));

/*判断是否到达最终的目的地,是的话做出标记*/

if(from.sin_addr.s_addr==haddr.sin_addr.s_addr)

got_there++;

break;

}

}

if (cc == 0) /*cc等于零意味着等待超时,该跳主机没有回应*/

printf(" * ");

}

printf("\r\n");

/*如果达到目的地,则退出循环*/

if (got_there)

break;

}

return 0;

}

/******************************************************************** ***************

函数:等待ICMP消息

rcvsock: 接收消息的套接字句柄

from: 远程主机地址结构的地址

databuf: 接收消息的缓冲区首地址

buflen: 消息缓冲区的长度

********************************************************************* **************/

int wait_for_reply(int rcvsock,struct sockaddr_in *from,char *databuf,int buflen) {

const int waittime=4; /*默认超时时间为4 秒*/

int cc = 0;

int fromlen = sizeof (*from);

/*套接字IO参数*/

fd_set fds; /* 套接字I/O集合*/

FD_ZERO(&fds);

FD_SET(rcvsock, &fds); /*把rcvsock加入到集合fds中*/

/*(超时)时间结构*/

struct timeval wait;

https://www.doczj.com/doc/bc14567521.html,_sec = waittime;

https://www.doczj.com/doc/bc14567521.html,_usec = 0;

/*选择一个集合fds,并查看该集合中的套接字是否存在待决的I/O操作(我们这里是读取操作)*/

/*默认等待时间为4秒*/

if (select(rcvsock+1, &fds, (fd_set *)0, (fd_set *)0, &wait) > 0) {

/*有数据可读,读取到指定的缓冲区中*/

cc=recvfrom(rcvsock, databuf, buflen, 0,

(struct sockaddr *)from, &fromlen);

}

return(cc);

}

/******************************************************************** **************

函数:向指定的地址发送一个UDP数据报

sndsock: 发送数据报套接字

whereto: 目的主机地址结构指针

ttl: 发送数据包的TTL值

********************************************************************* *************/

void send_probe(int sndsock,struct sockaddr_in *whereto,int ttl)

{

char databuf[UDPPACKETSIZE]; /*发送数据包缓冲区(数据部分)*/ bzero(databuf,sizeof(databuf));

/*设置发送套接字的选项(IPPROTO_IP级,IP_TTL类型),更改IP包头中的TTL为指定值*/

setsockopt(sndsock,IPPROTO_IP,IP_TTL,(char *)&ttl,sizeof(ttl));

/*发送数据包(携带UDPPACKETSIZE个字节的零)*/

int n = sendto(sndsock, databuf, sizeof(databuf), 0,(struct sockaddr *)whereto, sizeof(struct sockaddr));

if(n!=UDPPACKETSIZE) {

fprintf(stderr,"Error in sendto\r\n");

}

}

/******************************************************************** **************

函数:检查一个返回的IP包是否为期待的ICMP数据报(TTL超时或者目的端口不可到达)

buf: 数据缓冲区首地址

cc: 缓冲区中数据大小

********************************************************************* *************/

int check_packet(u_char *buf,int cc)

{

/*处理IP包头*/

struct ip *ip= (struct ip *) buf;

/*计算IP头大小*/

int hlen = ip->ip_hl << 2;

/*从大小来判断是否是一个ICMP包*/

if (cc < hlen + ICMP_MINLEN) {

return 0;

}

cc -= hlen;

/*处理ICMP头部*/

struct icmp *icp= (struct icmp *)(buf + hlen);

u_char type=icp->icmp_type; /*ICMP消息类型*/

u_char code=icp->icmp_code; /*ICMP消息代码*/

/*期待的ICMP消息只有两种:传输超时(TTL变为0),目的端口不可到达(已经到了目的主机)*/

if(type==ICMP_TIMXCEED || type==ICMP_UNREACH) {

struct ip *hip=&icp->icmp_ip;

hlen=hip->ip_hl<<2;

/*ICMP数据报会发回出错的数据报的IP头部和该IP数据报的头8个字节

我们检查该数据报的目的端口和源端口,看是否是我们发送的测试数据报*/

struct udphdr *udp=(struct udphdr *)((u_char *)hip+hlen);

if(hip->ip_p==IPPROTO_UDP && udp->dest==htons(DSTPORT) && udp->source==htons(SRCPORT))

/*if(hip->ip_p==IPPROTO_UDP && udp->uh_dport==htons(DSTPORT) &&

udp->uh_sport==htons(SRCPORT))*/

return 1;

}

return 0;

}

/******************************************************************** **************

函数:计算两个timeval结构表示的时间差值

********************************************************************* *************/

double deltaT(struct timeval *t1p,struct timeval *t2p)

{

double dt;

dt = (double)(t2p->tv_sec - t1p->tv_sec) * 1000.0 +

(double)(t2p->tv_usec - t1p->tv_usec) / 1000.0;

return (dt);

}

7.参考文献

1.吴功宜,董大凡,王珺,刘乾.计算机网络高级软件编程技术[M] 清华大学

出版社 2005

2.罗军舟,黎波涛,杨明等.TCP/IP协议及网络编程技术[M] 清华大学出版社

2004

3.吴玉,李岚.基于网络数据获取技术的网络监听的检测和防范[J].信息技

术.2007(8):142-143

4.张思民.嵌入式系统设计与应用[M]清华大学出版社2008

5.华清远见嵌入式培训中心.嵌入式LinuxC语言应用程序设计[M].人民邮电出

版社 2007

8.设计评语

2016Linux程序设计复习题

一、填空题 1、在Linux 系统中,以文件方式访问设备。 2、Linux 内核引导时,从文件/etc/fstab 中读取要加载的文件系统。 3、Linux 文件系统中每个文件用i 节点来标识。 4、全部磁盘块由四个部分组成,分别为引导块、专用块、i 节点表块和数据存储块。 5、链接分为:硬链接和符号链接。 6、超级块包含了i 节点表和空闲块表等重要的文件系统信息。 7、某文件的权限为:drw-r--r-- ,用数值形式表示该权限,则该八进制数为:644 ,该文件属性是目录。 8、前台起动的进程使用Ctrl+C 终止。 9、静态路由设定后,若网络拓扑结构发生变化,需由系统管理员修改路由的设置。 10、网络管理的重要任务是:控制和监控。 11、安装Linux 系统对硬盘分区时,必须有两种分区类型:文件系统分区和交换分区。 12、编写的Shell 程序运行前必须赋予该脚本文件执行权限。 13、系统管理的任务之一是能够在分布式环境中实现对程序和数据的安全 保护、备份、恢复和更新。 14、系统交换分区是作为系统虚拟存储器的一块区域。 15、内核分为进程管理系统、内存管理系统、I/O 管理系统和文件管理系统等四个子系统。 16、内核配置是系统管理员在改变系统配置硬件时要进行的重要操作。 17、在安装Linux 系统中,使用netconfig 程序对网络进行配置,该安装程序会一步步提示用 户输入主机名、域名、域名服务器、IP 地址、网关地址和子网掩码等必要信息。 18、唯一标识每一个用户的是用户ID 和用户名。 19、RIP 协议是最为普遍的一种内部协议,一般称为动态路由选择协议。 20、在Linux 系统中所有内容都被表示为文件,组织文件的各种方法称为文件系统。 21、DHCP可以实现动态IP 地址分配。 22、系统网络管理员的管理对象是服务器、用户和服务器的进程以及系统的各种资源。 23、网络管理通常由监测、传输和管理三部分组成,其中管理部分是整个网络管理的 中心。 24、当想删除本系统用不上的设备驱动程序时必须编译内核,当内核不支持系统上的 设备驱动程序时,必须对内核升级。 25、Ping 命令可以测试网络中本机系统是否能到达一台远程主机,所以常常用于测试网络 的连通性。 26、vi 编辑器具有三种工作模式:命令模式、底行模式和输入模式。 27、可以用ls –al 命令来观察文件的权限,每个文件的权限都用10 位表示,并分为四段, 其中第一段占 1 位,表示文件类型,第二段占 3 位,表示文件所有者对该文件的权限。 28、进程与程序的区别在于其动态性,动态的产生和终止,从产生到终止进程可以具有的基 本状态为:运行态、就绪态和等待态(阻塞态)。 29、DNS实际上是分布在internet 上的主机信息的数据库,其作用是实现IP地址和主

5、学会使用Ping、Traceroute、Telnet、SSH

学会使用Ping 、Traceroute 、Telnet 、SSH (测试和网络连接的小工具测试和网络连接的小工具)) 功能描述: 使用Ping 命令是用于检测网络设备可达性,它使用ICMP 有echo 信息来决定 远程设备是否可用,与远程主机通信来回的延迟delay,或是数据包的丢失情况. 使用Traceroute 跟踪从源到目的地所经过的路径跟踪从源到目的地所经过的路径。。 使得telnet , ssh (Secure Shell)远程控制设备. 1. 使用PING 命令 注:本实验使用R1,R2,R3,SW1四台设备测试四台设备测试,,配置好R1,R2,R3,SW1的IP 地址地址,,检查接口状检查接口状态为态为up 后再测试后再测试。。 在R1上测试到R2,R3的连通性 R1#ping 12.1.1.2 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 12.1.1.2, timeout is 2 seconds: !!!!! //5个!表明网络是通的 Success rate is 100 percent (5/5), round-trip min/avg/max = 4/4/8 ms R1#ping 13.1.1.3

Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 13.1.1.3, timeout is 2 seconds: !!!!! //5个!表明网络是通的 Success rate is 100 percent (5/5), round-trip min/avg/max = 4/4/8 ms R1# 在SW1上检查到R1的连通性的连通性:: SW1#ping 11.1.1.1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 11.1.1.1, timeout is 2 seconds: !!!!! //5个!表明网络是通的 Success rate is 100 percent (5/5), round-trip min/avg/max = 4/4/8 ms SW1# 通常通常在路由器或是交换机里使用在路由器或是交换机里使用ping 命令命令时常碰到的问题时常碰到的问题时常碰到的问题。。 a. 叹号(!):表示成功收到响应信息. b. 句号(.):表示在等待应答超时. c. U :表示目标主机不可达. d. Q :表示目标主机繁忙. e. M :代表不能分片(fragment). f. ?:表示未知数据包类型. g. & :表示数据包已没有生存期(lifetime) 2.使用traceroute 命令,检查从源检查从源到目的地经过的路由器的个数到目的地经过的路由器的个数.(或是数据包经过的路径) 注:本实验先确认R2到3 3.1.1.3是否有路由,和R3是否有到12.1.1.2的路由,可以用show ip route 命令检查,如果没有,分别在R1,R2,R3上配置路由: R1: ip route 33.1.1.0 255.255.255.0 13.1.1.3 R2: ip route 0.0.0.0 0.0.0.0 12.1.1.1 R3: ip route 0.0.0.0 0.0.0.0 13.1.1.1 在R2上使用traceroute 命令: R2#traceroute 33.1.1.3 Type escape sequence to abort. Tracing the route to 33.1.1.3 1 12.1.1.1 4 msec 4 msec 4 msec 2 13.1.1. 3 4 msec 4 msec * R2# 从以上可以看出从R2 到达33.1.1.3经过了12.1.1.1和13.1.1.3两个路由器 3.在PC 上是使用的是tracert 命令命令((路由器或是交换机使用的是traceroute ): 例如:跟踪从PC 到厦门电信DNS (202。101。103。55)所经过的路径所经过的路径((所经过的路由器个 数,相应IP 地址地址))

linux下 实现traceroute

1.#include 2.#include 3.#include 4.#include 5.#include 6.#include 7.#include 8.#include 9.#include 10.#include 11.#include 12.#include 13.#include 14. 15.struct ip 16.{ 17.#if __BYTE_ORDER == __LITTLE_ENDIAN 18. unsigned int ip_hl:4; /* little-endian IP头长度(单位 为32位)4位 */ 19. unsigned int ip_v:4; /* 版本号4 IP4用4 */ 20.#endif 21.#if __BYTE_ORDER == __BIG_ENDIAN 22. unsigned int ip_v:4; /* version */ 23. unsigned int ip_hl:4; /* header length */ 24.#endif 25. u_int8_t ip_tos; /* 服务类型一般为0 */ 26. u_short ip_len; /* 数据总长度 (单位为32位) */ 27. u_short ip_id; /* 标识16 */ 28. u_short ip_off; /* 分段偏移*/ 29.#define IP_RF 0x8000 /* reserved fragment标 志 */ 30.#define IP_DF 0x4000 /* dont fragment flag */ 31.#define IP_MF 0x2000 /* more fragments flag */ 32.#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */ 33. u_int8_t ip_ttl; /* 生存时间 */ 34. u_int8_t ip_p; /* 传输协议 tcp是6 */ 35. u_short ip_sum; /* 头校验和 */ 36.struct in_addr ip_src, ip_dst; /* 源地址目标地址 */ 37.}; 38. 39.struct icmp 40.{ 41.u_int8_t type; /* 消息类型 */

常见网络故障的分析及排除方法

常见网络故障的分析及排除方法 【摘要】计算机网络是一个复杂的综合系统,网络故障十分普遍,故障种类也极其繁杂。本文在对具体的网络故障分析基础上,给出了相应的排除方法。 【关键词】网络故障;常见故障;分类诊断;物理故障;逻辑故障 一、网络故障的分类 网络故障的成因无非是硬件和软件两个方面。按照网络故障的性质,网络故障可划分为物理故障与逻辑故障两类。物理故障也叫硬件故障,是指由硬件设备所引发的网络故障。在硬件故障中线路故障、端口故障、集线器或路由器故障及主机物理故障是较为常见的几种故障。 逻辑故障又称为软故障,表现特征为网络不通,或者同一个链路中有的网络服务通,有的网络服务不通。究其根源,是由于设备配置错误或者软件安装错误所致。路由器逻辑故障、主机逻辑故障、病毒故障是几种常见的逻辑故障。 二、排除故障的具体方法 排除故障的方法是不外乎从软件设置和硬件损坏两个方面来考虑: ㈠物理故障及排除方法 1、线路故障最普遍的情况是线路不通,是网络中常见的故障。线路损坏或线路受到严重电磁干扰时最容易引发该故障。诊断此故障时,若线路很短,最直接的方法是将该网络线一端插入一台能够正常连入局域网的主机的RJ45插空内,另一端插入正常的集线器端口中,然后在DOS环境下,使用PING命令在本主机上检测线路另一端主机(或路由器)的端口能否响应,用TRACEROUTE命令检查路由器配置是否正确,根据检测结果进行判断;若线路稍长,不方便移动,可使用网线测试仪器进行线路检测;若线路太长,或线路由电信供应商提供,则需要与提供商协同检查线路,确认是否线路中间出现了故障。 对于存在严重电磁干扰的检测,可以使用屏蔽性能很强的屏蔽线在该线路上进行通信测试,若通信正常,表明存在电磁干扰。若问题依旧,可排除电磁干扰故障。 2、端口故障分为插头松动及端口本身的物理故障。此类故障一般会直接影响到与其相连的其他设备的信号灯状态。信号灯较直观,通过信号灯大体上可以判断出故障的发生范围及有可能存在的因素。检测时,首先应检查RJ45插头是否松动或检查RJ45接口是否制作完好,然后查看集线器或交换机的接口,如果某个接口存在问题,可以更换接口后再进行验证是否真的存在端口故障。 3、路由器或集线器故障会直接导致网络不通。这类故障也是网络上一种常见的故障,故障的现象与线路故障很相近,在诊断此种故障时,必须用专门的诊断工具来收集路由器的端口流量、路由表、路由器CPU温度、负载及路由器的内存余量、计费数据等数据。检测时,可采用替换排除法,用通信正常的网线和主机来连接路由器或集线器,若通信正常,表明路由器或集线器没有故障;反之则应调换路由器(或集线器)的端口来确认故障;很多情况下,路由器(或集线器)的指示灯表明了其本身是否存在故障,正常的情况下对应端口的指示灯为绿色指示灯。通过以上测试后,若问题依旧,可断定路由器或集线器上存在故障。 4、主机物理故障包括网卡物理故障,网卡插槽故障,网卡松动及主机本身故障。对于网卡插槽故障和网卡松动的诊断可通过更换网卡插槽来进行。如果更换插槽仍不能解决故障,可将网卡放到其他正常工作的主机上测试,若正常通信,是主机本身故障,若无法工作,是网卡物理物理故障,更换网卡故障可排除。

traceroute程序设计与实现

Traceroute程序设计与实现 学生姓名: 莫小锋指导老师:龙计征 摘要本文主要讲述了路由追踪的基本程序设计与实现,并给出了一种基于IP网络的路由追踪命令Tr acert,详细分析了实现路由追踪的基本原理,归纳了路由追踪的基本流程。Tr acert通过ICMP协议和IPheader中TTL(存活时间)利用路由器对数据报存活时间的处理方式来实现路由探测的。首先根据任务书设计好流程图,然后编写程序代码,运行得到Traceroute的命令窗口。提取tracert 的输出,再结合现有IP数据库及自建地名- 坐标数据库对路由中各节点IP进行定位,最终实现了动态显示追踪的详细信息和路径。 关键词: IP 地址,ICMP协议,TTL,Tracert路由追踪

1 引言 Internet,是目前世界上最大的计算机网络,更确切的说是网络中的网络,它由遍布全球的几万局域网和数百万台计算机组成,并通过用于异构网络的TCP/IP协议进行网间通信。互联网中,信息的传送是通过网中许多段的传输介质和设备从一端到达另一端。每一个连接在Internet上的设备,如主机、路由器、接入服务器等一般情况下都会有一个独立的IP地址。通过Traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路劲。当然每次数据包由某一同样的出发点到达某一同样的目的地走的路劲可能会不同,但基本上来说大部分时候所走的路由是相同的。随着Internet(国际互联网)的发展,越来越多的服务通过网络提供给大众,与此同时,针对互联网的攻击事件也越来越频繁。所谓路由追踪实际上就是在IP网络上判断从源到达目的所经过的路由器的IP地址,其基本的实现手段都是向目的地发送数据包以获取经过的路由器的IP。由于Internet上的路由协议是动态的,所以每次形成的数据包从同一个出发点到达目的地的路由可能会不一样,但由于路由算法有一定的稳定性,在大部分时侯所走的路由会是相同的。 1.1 课程设计目的 1.这次课程设计,主要为了加深同学们对计算机网络网络的理解和认识 2.了解信息在计算机网络与网络之间的传送和接收 3.进一步加深了解网络与网络之间的协议 4.理解网络中的IP地址以及路由之间的相关命令。 1.2 课程设计内容 1.已知参数:输入:目的节点IP地址或主机名;输出:从控制台屏幕输出IP 报文由本机出发到达目的主机所经过的路由信息。 2.设计要求:通过原始套接字编程,实现Tracert的基本功能

Ping命令详解

Ping (Packet Internet Gopher) 網路封包測試相關資料 可用來測試遠端的主機是否存在,判斷網路是否正常 測試方法: 啟動DOS模式> 輸入PING 210.70.11.249 指令名稱ping 使用權限任何有效之使用者 使用方式ping [-dfnqrRv] [-c <完成次數>] [-ig<間隔秒數>] [-I <網路介面>][-l <前置載入>] [-p <筥本樣式>] [-s <封包大小>] [-t <存活數值>] [主機名稱或IP位址] 說明使用ICMP(Internet Control Message Protocol) 傳輸協定,偵測遠端主機的網路功能是否正常,而給予回應訊息。 參數 -c 設定完成要求回應的次數。此指令會反覆發出訊息,直到完成的次數為止。 -q 不顯示指令執行過程,除開始和結束之相關訊息外。 -s 設定封包大小。 -v 顯示指令執行詳細過程,包括非回應訊息的資訊皆會被列出。 筥例1.偵測192.168.1.1的網路功能是否正常: * ping 192.168.1.1 Windows網路管理 -------------------------------------------------------------------------------- 作者:李忠憲mailto:shane@https://www.doczj.com/doc/bc14567521.html,.tw -------------------------------------------------------------------------------- 前言 過去系統管理師主要負責業務是校務行政系統的管理、訓練,有些學校系統管理師尚且兼管電腦教室,TANet到中小學後,系統管理師又兼網路管理師,部分教室電腦試行學校,系統管理師另須負責教室電腦的管理維護之責。簡單的說,目前系統管理師一人所負責的業務,幾近於一家社區電腦公司的工作量,這當然不是一般人能夠做的事。因此除非有濃厚的興趣,否則系統管理師通常都做不長久,在這樣的環境中,系統管理師還必須努力求新知,以免被工作淘汰。 筆者也當過系統管理師,所以能夠體認系統管理師的辛苦,希望此文能對系統管理師微有幫助! 網路規劃

网络协议分析实验报告

课程设计 课程设计题目网络协议分析实验报告学生姓名: 学号: 专业: 2014年 6 月 29日

实验1 基于ICMP的MTU测量方法 实验目的 1)掌握ICMP协议 2)掌握PING程序基本原理 3)掌握socket编程技术 4)掌握MTU测量算法 实验任务 编写一个基于ICMP协议测量网络MTU的程序,程序需要完成的功能: 1)使用目标IP地址或域名作为参数,测量本机到目标主机经过网络的MTU; 2)输出到目标主机经过网络的MTU。 实验环境 1)Linux系统; 2)gcc编译工具,gdb调试工具。 实验步骤 1.首先仔细研读ping.c例程,熟悉linux下socket原始套接字编程模式,为实验做好准备; 2.生成最大数据量的IP数据报(64K),数据部分为ICMP格式,ICMP报文为回送请求报 文,IP首部DF位置为1;由发送线程发送; 3.如果收到报文为目标不可达报文,减少数据长度,再次发送,直到收到回送应答报文。 至此,MTU测量完毕。

ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。它是一个非常重要的协议,它对于网络安全具有极其重要的意义。[1] 它是TCP/IP协议族的一个子协议,属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。ICMP报文在IP帧结构的首部协议类型字段(Protocol 8bit)的值=1.

ICMP原理 ICMP提供一致易懂的出错报告信息。发送的出错报文返回到发送原数据的设备,因为只有发送设备才是出错报文的逻辑接受者。发送设备随后可根据ICMP报文确定发生错误的类型,并确定如何才能更好地重发失败的数据包。但是ICMP唯一的功能是报告问题而不是纠正错误,纠正错误的任务由发送方完成。 我们在网络中经常会使用到ICMP协议,比如我们经常使用的用于检查网络通不通的Ping命令(Linux和Windows中均有),这个“Ping”的过程实际上就是ICMP协议工作的过程。还有其他的网络命令如跟踪路由的Tracert命令也是基于ICMP协议的。 ICMP(Internet Control Message,网际控制报文协议)是为网关和目标主机而提供的一种差错控制机制,使它们在遇到差错时能把错误报告给报文源发方.是IP层的一个协议。但是由于差错报告在发送给报文源发方时可能也要经过若干子网,因此牵涉到路由选择等问题,所以ICMP报文需通过IP协议来发送。ICMP数据报的数据发送前需要两级封装:首先添加ICMP 报头形成ICMP报文,再添加IP报头形成IP数据报 通信术语最大传输单元(Maximum Transmission Unit,MTU)是指一种通信协议的某一层上面所能通过的最大数据包大小(以字节为单位)。最大传输单元这个参数通常与通信接口有关(网络接口卡、串口等)。 实验2 基于UDP的traceroute程序 实验目的 1)掌握UDP协议 2)掌握UDP客户机/服务器编程模式 3)掌握socket编程技术 4)掌握traceroute算法

PING和TRACEROUTE命令详解

本文转载自56CTO 引言:这个文档介绍了ping和traceroute命令的用法。借助于一些debug命令,此文档捕获了一个关于这些命令如何工作的更多相关细节的视图。 注意:在产品路由器上启用任何debug命令都将引起一系列问题。我们建议你在实行debug 命令之前先仔细阅读Use the Debug Command 章节。 前提条件:在本文档中没有特别的要求。 组件:使用本文档没有特殊软件或者是硬件版本的限制。 本文档中的信息是由一个具体的实验环境设备产生的。文档中所有设备的使用都是从默认配置开始的。如果你的网络是活动的,请确保你能够了解任何命令产生的潜在影响。 协定:关于文档协定的更多信息,请浏览相关Cisco Technical Tips Conventions. 关于本文档的背景信息,我们使用如下的基本配置作为我们的例子的基础。 PING命令 Ping命令是一个很常见的命令,用于排除设备可访问性的故障。它使用一系列的ICMP响应消息来确定: ·一个远程主机是否处于活动状态。 ·主机通信的往返路程延迟。 ·包丢失。 Ping命令首先发送一个响应请求到一个地址,然后等待答复。要ping成功,只有: ·响应请求到达目的地址,并且 ·目的地址在一个称作超时(time out)的预设时间内能够获得一个响应应答返回给源地址,在Cisco路由器上,这个超时的默认值是2秒。 关于此命令的所有选项,在Troubleshooting Commands中,见“Ping”。 警告:在产品路由器中使用debug ip packet detail命令会引致CPU的高利用率。这样可能会导致一个严重的性能降级或者网络中断。我们建议你在实行debug命令前仔细阅读Use the Debug Command。 Router1#debug ip packet detail IP packet debugging is on (detailed)Router1#ping 12.0.0.2 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 12.0.0.2, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 4/6/8 ms Router1# Jan 20 15:54:47.487: IP: s=12.0.0.1 (local), d=12.0.0.2 (Serial0), len 100, sendingJan 20 15:54:47.491: ICMP type=8, code=0!--- This is the ICMP packet 12.0.0.1 sent to 12.0.0.2. !--- ICMP type=8 corresponds to the echo message. Jan 20 15:54:47.523: IP: s=12.0.0.2 (Serial0), d=12.0.0.1 (Serial0), len 100, rcvd 3Jan 20 15:54:47.527: ICMP type=0, code=0!--- This is the answer we get from 12.0.0.2. !--- ICMP type=0 corresponds to the echo reply message.

福州大学网络程序设计考试随堂习题答案

1、socket()、bind()、connect()、listen()、accept()、close()在套接口编程中的作用各是什么? socket():执行网络通信,进程调用socket函数,指定期望的通信协议 bind():将一个本地协议地址赋予一个套接口 connect():TCP客户端与服务器建立连接用connect函数 connect的三种出错返回 [1] 若TCP客户没有收到SYN分节的响应(ACK)——返回ETIMEOUT错误 [2] 若对客户的SYN响应是RST,则表示该服务器主机在指定端口上没有进程在等待与之连接 [3]称为硬错(hard error),客户收到RST立即返回 ECONNREFUSED错误 listen():监听端口: 未连接的套接口-- 被动套接口 内核应该接收指向该套接口的连接请求 套接口状态:CLOSED -- LISTEN 服务端在socket和bind后,accept前调用 accept(): TCP服务器调用 从已完成连接队列头返回下一个已完成连接 已完成队列为空,则进程睡眠 close():用来关闭套接口,终止TCP连接 2、Ping程序、Traceroute程序和ICMP消息守护程序的工作原理。 ping程序的工作原理是:向网络上的另一个主机系统发送ICMP报文,如果指定系统得到了报文,它将把报文一模一样地传回给发送者. Traceroute程序工作原理 1、向目的地发送一个TTL为1的UDP数据报 2、该数据报导致第一跳路由返送一个ICMP错误 3、每递增TTL一次发送一个UDP数据报,逐步确定下一跳路由器 4、当UDP数据报(TTL增加到一定大小后)到达最终目的地时,目标主机返送一个ICMP 错误 ICMP消息守护程序工作原理 1、UDP应用程序使用Unix域套接口的描述字传递机制,通过Unix域连接把自身的UDP套接口传递给icmpd共享 2、icmpd得到该套接口的拷贝后通过getsockname获取绑定在此套接口上的端口号,随即关闭该套接口的本地拷贝 3、icmpd一旦收到了由UDP应用进程通过绑定在它的UDP套接口上的端口发送的UDP数据报所引发的任何ICMP错误,就可以通过Unix域连接向该应用进程发送一个消息 4、UDP应用进程需要使用多路复用方式等待其UDP套接口和Unix域套接口中任何一个有数据到达而变为可读

linux c网络网络编程面试题收集

[转] linux c/网络/网络编程面试题收集 基础部份: 1.下列程序在32位linux或unix中的结果是什么? func(char *str) { printf("%d",sizeof(str)); printf("%d",strlen(str)); } main() { char a[]="123456789"; printf("%d",sizeof(a)); func(a); } 答: 10 4 9 网络/网络编程部份: 1、connect方法会阻塞,请问有什么方法可以避免其长时间阻塞? 答:最通常的方法最有效的是加定时器;也可以采用非阻塞模式。 2、网络中,如果客户端突然掉线或者重启,服务器端怎么样才能立刻知道? 答:若客户端掉线或者重新启动,服务器端会收到复位信号,每一种tcp/ip得实现不一样,控制机制也不一样。 3.在子网210.27.48.21/30种有多少个可用地址?分别是什么? 答: 简: 30表示的是网络号(network number)是30位,剩下2位中11是广播(broadcast)地址,00是multicast 地址,只有01和10可以作为host address。 详:

210.27.48.21/30代表的子网的网络号是30位,即网络号是210.27.48.21 & 255.255.255.251=210.27.48.20,此子网的地址空间是2位,即可以有4个地址:210.27.48.20, 210.27.48.21, 210.27.48.22, 210.27.48.23。第一个地址的主机号(host number/id)是0,而主机号0代表的是multicast地址。最后一个地址的最后两位是11,主机号每一位都为1代表的是广播(broadcast)地址。所以只有中间两个地址可以给host使用。其实那个问题本身不准确,广播或multicast地止也是可以使用的地址,所以回答4也应该正确,当然问的人也可能是想要你回答2。我个人觉得最好的回答是一个广播地址,一个multicast地址,2个unicast地址。 4.TTL是什么?有什么用处,通常那些工具会用到它?(ping? traceroute? ifconfig? netstat?) 答: 简:TTL是Time To Live,一般是hup count,每经过一个路由就会被减去一,如果它变成0,包会被丢掉。它的主要目的是防止包在有回路的网络上死转,浪费网络资源。ping和traceroute用到它。 详:TTL是Time To Live,目前是hup count,当包每经过一个路由器它就会被减去一,如果它变成0,路由器就会把包丢掉。IP网络往往带有环(loop),比如子网A和子网B有两个路由器相连,它就是一个loop。TTL的主要目的是防止包在有回路的网络上死转,因为包的TTL最终后变成0而使得此包从网上消失(此时往往路由器会送一个ICMP包回来,traceroute就是根据这个做的)。ping会送包出去,所以里面有它,但是ping不一定非要不可它。traceroute则是完全因为有它才能成的。ifconfig是用来配置网卡的,netstat -rn 是用来列路由表的,所以都用不着它 5.路由表示做什么用的?在linux环境中怎么来配置一条默认路由? 答: 简:路由表是用来决定如何将包从一个子网传送到另一个子网的,换局话说就是用来决定从一个网卡接收到的包应该送的哪一张网卡上的。在Linux上可以用“route add default gw <默认路由器IP>”来配置一条默认路由。详:路由表是用来决定如何将包从一个子网传送到另一个子网的,换局话说就是用来决定从一个网卡接收到的包应该送的哪一张网卡上的。路由表的每一行至少有目标网络号、netmask、到这个子网应该使用的网卡。当路由器从一个网卡接收到一个包时,它扫描路由表的每一行,用里面的netmask和包里的目标IP地址做并逻辑运算(&)找出目标网络号,如果此网络号和这一行里的网络号相同就将这条路由保留下来做为备用路由,如果已经有备用路由了就在这两条路由里将网络号最长的留下来,另一条丢掉,如此接着扫描下一行直到结束。如果扫描结束任没有找到任何路由,就用默认路由。确定路由后,直接将包送到对应的网卡上去。在具体的实现中,路由表可能包含更多的信息为选路由算法的细节所用。题外话:路由算法其实效率很差,而且不scalable,解决办法是使用IP交换机,比如MPLS。

常见的9个网络命令详解(图)

实验:常见的9个网络命令 1.ping命令 ping是个使用频率极高的实用程序,主要用于确定网络的连通性。这对确定网络是否正确连接,以及网络连接的状况十分有用。简单的说,ping就是一个测试程序,如果ping 运行正确,大体上就可以排除网络访问层、网卡、Modem的输入输出线路、电缆和路由器等存在的故障,从而缩小问题的范围。 ping能够以毫秒为单位显示发送请求到返回应答之间的时间量。如果应答时间短,表示数据报不必通过太多的路由器或网络,连接速度比较快。ping还能显示TTL(Time To Live,生存时间)值,通过TTL值可以推算数据包通过了多少个路由器。 (1) 命令格式 ping 主机名 ping 域名 ping IP地址 如图所示,使用ping命令检查到IP地址210.43.16.17的计算机的连通性,该例为连接正常。共发送了四个测试数据包,正确接收到四个数据包。 (2) ping命令的基本应用 一般情况下,用户可以通过使用一系列ping命令来查找问题出在什么地方,或检验网

络运行的情况。 下面就给出一个典型的检测次序及对应的可能故障: ① ping 127.0.0.1 如果测试成功,表明网卡、TCP/IP协议的安装、IP地址、子网掩码的设置正常。如果测试不成功,就表示TCP/IP的安装或设置存在有问题。 ② ping 本机IP地址 如果测试不成功,则表示本地配置或安装存在问题,应当对网络设备和通讯介质进行测试、检查并排除。 ③ ping局域网内其他IP 如果测试成功,表明本地网络中的网卡和载体运行正确。但如果收到0个回送应答,那么表示子网掩码不正确或网卡配置错误或电缆系统有问题。 ④ ping 网关IP 这个命令如果应答正确,表示局域网中的网关路由器正在运行并能够做出应答。 ⑤ ping 远程IP 如果收到正确应答,表示成功的使用了缺省网关。对于拨号上网用户则表示能够成功的访问Internet(但不排除ISP的DNS会有问题)。 ⑥ ping localhost local host是系统的网络保留名,它是127.0.0.1的别名,每台计算机都应该能够将该名字转换成该地址。否则,则表示主机文件(/Windows/host)中存在问题。 ⑦ ping https://www.doczj.com/doc/bc14567521.html,(一个著名网站域名) 对此域名执行Ping命令,计算机必须先将域名转换成IP地址,通常是通过DNS服务器。如果这里出现故障,则表示本机DNS服务器的IP地址配置不正确,或它所访问的DNS服务器有故障 如果上面所列出的所有ping命令都能正常运行,那么计算机进行本地和远程通信基本上就没有问题了。但是,这些命令的成功并不表示你所有的网络配置都没有问题,例如,某些子网掩码错误就可能无法用这些方法检测到。 (3)ping命令的常用参数选项 ping IP -t:连续对IP地址执行ping命令,直到被用户以Ctrl+C中断。 ping IP -l 2000:指定ping命令中的特定数据长度(此处为2000字节),而不是缺

ping, tracert和traceroute,Ipconfig命令详解

ping, tracert和traceroute Ipconfig命令详解 ping命令详解 使用ping可以测试计算机名和计算机的ip 地址,验证与远程计算机的连接,通过将icmp 回显数据包发送到计算机并侦听回显回复数据包来验证与一台或多台远程计算机的连接,该命令只有在安装了tcp/ip 协议后才可以使用。现在打开你的ms-dos(开始→程序→ms-dos),用win2000的朋友打开cmd.exe(这是win2000下的ms-dos,开始→程序→附件→"命令提示符" 或开始→搜索文件或文件夹→"填入cmd.exe",找到后双击运行就可以了。)下面我们来看看他的命令: 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 指定的计算机直到中断。ctrl+c停止 -a 将地址解析为计算机名。例:c:\\>ping -a 127.0.0.1 pinging china-hacker [127.0.0.1] with 32 bytes of data:(china-hacker就是他的计算机名)reply from 127.0.0.1: bytes=32 timeping https://www.doczj.com/doc/bc14567521.html, pinging https://www.doczj.com/doc/bc14567521.html, [192.20.239.132] with 32 bytes of data: (192.20.239.132 他的ip地址) reply from 192.20.239.132:bytes=32 time=101ms ttl=243 reply from 192.20.239.132:bytes=32 time=100ms ttl=243 reply from 192.20.239.132:bytes=32 time=120ms ttl=243 reply from 192.20.239.132:bytes=32 time=120ms ttl=243 ******#***TRACERT的使用 Traceroute使用详解

基于traceroute实现目标路径的追踪

Xx 师范学院 计算机与信息技术学院 计算机网络原理 课程设计报告书 课题名称 基于traceroute 实现目标路径的跟踪 姓 名 学 号 院、系 计算机与信息技术 专 业 计算机科学与技术 指导教师 2012年 12 月 27 日 ※ ※※※※※※※※ ※※ ※※ ※※ ※ ※※※※※※ 2010级学生 计算机网络原理 课程设计

目录 一、设计目的 (1) 二、设计要求 (1) 三、设计的理论基础、原理 (1) 四、设计关键相关技术、算法及设计实现过程 (5) 五、设计总结 (11) 六、参考文献 (12)

一、设计目的 1.熟悉原始套接字编程。 2.了解网络的结构。 3.了解网络传输底层协议。 4.熟悉掌握 ICMP协议的工作原理和路由跟踪原理。 5.掌握vc 6.0下程序调试、运行的基本方法。 6.通过实验熟悉协议的应用。 二、设计要求 1、通过实验,可以使程序记录并显示了数据报从源端机器传送到目标机器的过程中所经过的路由器的IP地址,并且记录了数据报到达每个路由器所需要的时间。认真观察到达每个路由器的时间有什么区别,从而熟练掌握tracert 的工作原理和ICMP报文协议。 2、当我们不能通过网络访问目的设备时,网络管理员就需要判断是哪里出了问题。问题不仅仅会出现在最终目的设备,也可能出现在转发数据包的中间路由器。 三、设计理论基础、原理 1、Dos命令Traceroute跟踪路由详解 -d 防止traceroute 试图将中间路由器的IP 地址解析为它们的名称。这样可加速显示traceroute 的结果。 -h MaximumHops 指定搜索目标(目的)的路径中存在的跃点的最大数。默认值为30 个跃点。 -j HostList 指定回显请求消息将IP 报头中的松散源路由选项与HostList 中指定的中间目标集一起使用。使用松散源路由时,连续的中间目标可以由一个或多个路由器分隔开。HostList 中的地址或名称的最大数量为9。HostList 是一系列由空格分隔的IP 地址(用带点的十进制符号表示)。仅当跟踪IPv4 地址时才使用该参数。 -w Timeout 指定等待“ICMP 已超时”或“回显答复”消息(对应于要接收的给定“回现请求”消息)的时间(以毫秒为单位)。如果超时时间内未收到消息,则显示一个星号(*)。默认的超时时间为4000(4 秒)。 -R 指定IPv6 路由扩展标头应用来将“回显请求”消息发送到本地主机,使用目标作为中间目标并测试反向路由。 -S 指定在“回显请求”消息中使用的源地址。仅当跟踪IPv6 地址时才使用该参数。 -4

Traceroute命令学习理解

Tarcerout程序 作用 可以让我们看到IP数据报从一台主机传到另一台主机所经过的路由。而且它还可以让我们使用IP源路由选项 为什么不是使用IP首部中的IP记录路由选项而另外开发一个应用程序 1.并不是所有的路由器都支持记录路由选项,因此该选项在某些路径上不能使用而Traceroute程序不需要中间路由器具备任何特殊的或不可选的功能。 2.记录路由一般是单向的选项,如果发送端设置了该选项,那么接收端不得不从收到的IP首部中提取所有的信息,然后全部返回给客户端。而Traceroute程序只需要目的端运行一个UDP模块——其他不需要任何特殊的服务器应用程序。 3.最重要的原因是,IP首部中留给选项的空间有限,不能存放当前大多数的路径。Traceroute程序使用ICMP报文中IP首部中的TTL字段。TTL 字段是由发送端初始设置一个8bit的字段。发送ICMP回显应答时经常把TTL设为最大值255。 TTL的概念及作用 1.它是指数据报的生存时间,每个处理数据报的路由器都需要把TTL 的值减去数据报在路由器中停留的秒数,由于大多数的路由器转发数 据报的时延都小于1秒,所以现在大多数厂商在设置路由器的时候都 把经过的数据报的TTL值减1——————————成为一个跳站的 计数器。 2.TTL字段的目的是防止数据报在选路时无休止地在网络中流动————既防止路由环路 3.当TTL字段是0或1的时候,则路由器不转发该数据报,而是将该包丢弃,并给信源机发一份ICMP“超时”信息。Traceroute就是利用 了包含这份ICMP信息的IP报文,因为里面有发送该信息的路由器 的IP地址。 4.接收到这种数据报的目的主机可以将它交给应用程序,这是因为不需要转发该数据报。但是在通常情况下,系统不应该接收TTL字段为0 的数据报。

实验 - 使用 Ping 命令和 Traceroute 命令测试网络延时

实验 - 使用 Ping 命令和 Traceroute 命令测试网络延时 拓扑 目标 第 1 部分:使用 Ping 命令记录网络延时 第 2 部分:使用 Traceroute 命令记录网络延时 背景/场景 要获得实际的网络延迟统计信息,必须在真实网络中进行此练习。一定要向教师确认网络中是否存在针对ping 命令的本地安全使用限制。 本实验的目的是:测量和评估网络延迟随时间的变化情况,以及在一天中的不同时段捕获典型网络活动的代表性样本。使用ping命令对远程计算机返回的延迟进行分析即可完成。返回延迟时间(以毫秒计算)将通过计算延迟时间的平均延时(平均值)和范围(最高和最低)来进行总结。 所需资源 ? 1 台 PC(采用 Windows 7、Vista 或 XP 且可访问 Internet) 第 1 部分:使用 Ping 命令记录网络延时 在第 1 部分,您将检查位于全球不同地区的几个网站的网络延时。此过程可在企业生产网络中使用以创建性能基线。 第 1 步:检验连通性。 对以下地区互联网注册管理机构 (RIR) 的网站执行 ping 操作以验证连接: C:\Users\User1>ping https://www.doczj.com/doc/bc14567521.html, C:\Users\User1>ping https://www.doczj.com/doc/bc14567521.html, C:\Users\User1>ping https://www.doczj.com/doc/bc14567521.html, C:\Users\User1>ping https://www.doczj.com/doc/bc14567521.html, 注意:因为 https://www.doczj.com/doc/bc14567521.html, 没有响应 ICMP 请求,所以不能用于本实验。

第 2 步:收集网络数据。 您将通过向步骤 1 所列出的每个地址发送 25 个响应请求,在ping输出中收集足够多的数据以计算统计信息。 将每个网站的结果记录到文本文件中。 a. 在命令提示符下,键入 ping以列出可用选项。 C:\Users\User1> 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] [-R] [-S srcaddr] [-4] [-6] 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 (IPv4-only). -i TTL Time To Live. -v TOS Type Of Service (IPv4-only. This setting has been deprecated <省略部分输出> b. 如下所示,您可以使用 ping命令以及计数选项,向目的地发送 25 个响应请求。另外,它将在当前目录 中使用文件名arin.txt创建一个文本文件。该文本文件将包含响应请求的结果。 C:\Users\User1>ping –n 25 https://www.doczj.com/doc/bc14567521.html, > arin.txt 注意:末端将保持空白直到命令完成,因为输出已重定向到文本文件(本示例中为arin.txt)。“>”符号用于将屏幕输出重定向到文件中,并且如果文件已存在,则覆盖此文件。如果想要将更多结果附加到文件中,在命令中将“>”替换为“>>”。 c. 对其他网站重复 ping命令。

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