计算机网络课程设计-编程实现简单的TCP协议分析器

时间:2019-05-14 02:19:49下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《计算机网络课程设计-编程实现简单的TCP协议分析器》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《计算机网络课程设计-编程实现简单的TCP协议分析器》。

第一篇:计算机网络课程设计-编程实现简单的TCP协议分析器

编程实现简单的TCP协议分析器

编程实现简单的TCP协议分析器

一、问题描述

编程实现简单的TCP协议分析器,TCP协议分析器是一种用于监督和跟踪网络活动的诊断工具,它从局域网中抓取IP数据包,并对它进行分析得到相应的头部信息,过滤TCP包进行分析,得到TCP包的相应信息。

二、基本要求

1.利用原始套接字实现简单的TCP协议分析器。2.系统功能包括:

2.1 原始套接字与网卡绑定,并接收流经网卡的所有数据包; 2.2 对数据包进行分析以获得源IP地址和目的IP地址; 2.3 对TCP Segment进行分析以获得其首部详细信息; 2.4 显示分析结果。3 建议使用VC++。

三、设计思想

TCP协议的数据传送程序是由二个子程序组成的。也可以看成是服务器端程序和客户端程序,其中:服务器端程序的功能是侦听端口号,接收远 程主要的TCP连接申请,并接收远程主机传送来的文字数据。另外一个子程序,也就是所谓的客户端程序,主要实现向网络的远程主机提出TCP连接申请。

程序利用原始套接字抓取局域网中的IP包。

TCP协议分析器实现了sniffer的一部分功能。而sniffer的工作原理是:1.把网卡置于混杂模式;2.捕获数据包;3.分析数据包。

Raw Socket: 原始套接字可以用它来发送和接收 IP 层以上的原始数据包, 如 ICMP,TCP, UDP等。

四、系统结构

(1)Pcap_addr描述网络接口地址;

(2)pcap_pkthdr用来描述每个捕获到的数据包的基本信息;(3)int_pcaplookupnet获取网络地址和网络掩码;

(4)int_pcaploop循环捕获网络数据包,直到遇到错误或满足退出条件;(5)pcap_t* pcap_open_dead构造一个libpcap句柄。

五、程序流程(或模块划分)

编程实现简单的TCP协议分析器

六、源程序

#include “pcap.h” struct ether_header {

u_int8_t ether_dhost[6];

/* 目的以太网地址 */

u_int8_t ether_shost[6];

/* 源以太网地址 */

u_int16_t ether_type;

/* 以太网类型 */ };struct arp_header

编程实现简单的TCP协议分析器

{

u_int16_t arp_hardware_type;

/* 硬件类型 */

u_int16_t arp_protocol_type;

/* 协议类型 */

u_int8_t arp_hardware_length;

/* 硬件地址长度 */

u_int8_t arp_protocol_length;

/* 协议地址长度 */

u_int16_t arp_operation_code;

/* 操作码 */

u_int8_t arp_source_ethernet_address[6];

/* 源以太网地址 */

u_int8_t arp_source_ip_address[4];

/* 源IP地址 */

u_int8_t arp_destination_ethernet_address[6];

/* 目的以太网地址 */

u_int8_t arp_destination_ip_address[4];

/* 目的IP地址 */ };struct ip_header {

#if defined(WORDS_BIGENDIAN)

u_int8_t ip_version: 4,/* 版本 */

ip_header_length: 4;

/* 首部长度 */

#else

u_int8_t ip_header_length: 4, ip_version: 4;

#endif

u_int8_t ip_tos;

/* 服务质量 */

u_int16_t ip_length;

/* 长度 */

u_int16_t ip_id;

/* 标识 */

u_int16_t ip_off;

编程实现简单的TCP协议分析器

/* 偏移 */

u_int8_t ip_ttl;

/* 生存时间 */

u_int8_t ip_protocol;

/* 协议类型 */

u_int16_t ip_checksum;

/* 校验和 */

struct in_addr ip_souce_address;

/* 源IP地址 */

struct in_addr ip_destination_address;

/* 目的IP地址 */ };struct udp_header {

u_int16_t udp_source_port;

/* 源端口号 */

u_int16_t udp_destination_port;

/* 目的端口号 */

u_int16_t udp_length;

/* 长度 */

u_int16_t udp_checksum;

/* 校验和 */ };struct tcp_header {

u_int16_t tcp_source_port;

/* 源端口号 */

u_int16_t tcp_destination_port;

/* 目的端口号 */

u_int32_t tcp_sequence_liuzhen;

/* 序列号 */

u_int32_t tcp_acknowledgement;

/* 确认序列号 */

#ifdef WORDS_BIGENDIAN

u_int8_t tcp_offset: 4,/* 偏移 */

编程实现简单的TCP协议分析器

tcp_reserved: 4;

/* 未用 */

#else

u_int8_t tcp_reserved: 4,/* 未用 */

tcp_offset: 4;

/* 偏移 */

#endif

u_int8_t tcp_flags;

/* 标记 */

u_int16_t tcp_windows;

/* 窗口大小 */

u_int16_t tcp_checksum;

/* 校验和 */

u_int16_t tcp_urgent_pointer;

/* 紧急指针 */ };struct icmp_header {

u_int8_t icmp_type;

/* ICMP类型 */

u_int8_t icmp_code;

/* ICMP代码 */

u_int16_t icmp_checksum;

/* 校验和 */

u_int16_t icmp_id;

/* 标识符 */

u_int16_t icmp_sequence;

/* 序列码 */ };void tcp_protocol_packet_callback(u_char *argument, const struct pcap_pkthdr *packet_header, const u_char *packet_content){

struct tcp_header *tcp_protocol;

/* TCP协议变量 */

u_char flags;

编程实现简单的TCP协议分析器

/* 标记 */

int header_length;

/* 长度 */

u_short source_port;

/* 源端口 */

u_short destination_port;

/* 目的端口 */

u_short windows;

/* 窗口大小 */

u_short urgent_pointer;

/* 紧急指针 */

u_int sequence;

/* 序列号 */

u_int acknowledgement;

/* 确认号 */

u_int16_t checksum;

/* 校验和 */

tcp_protocol =(struct tcp_header*)(packet_content + 14+20);

/* 获得TCP协议内容 */

source_port = ntohs(tcp_protocol->tcp_source_port);

/* 获得源端口 */

destination_port = ntohs(tcp_protocol->tcp_destination_port);

/* 获得目的端口 */

header_length = tcp_protocol->tcp_offset *4;

/* 长度 */

sequence = ntohl(tcp_protocol->tcp_sequence_liuzhen);

/* 序列码 */

acknowledgement = ntohl(tcp_protocol->tcp_acknowledgement);

/* 确认序列码 */

windows = ntohs(tcp_protocol->tcp_windows);

/* 窗口大小 */

urgent_pointer = ntohs(tcp_protocol->tcp_urgent_pointer);

/* 紧急指针 */

flags = tcp_protocol->tcp_flags;

/* 标识 */

checksum = ntohs(tcp_protocol->tcp_checksum);

编程实现简单的TCP协议分析器

/* 校验和 */

printf(“-------TCP协议

-------n”);

printf(“源端口号:%dn”, source_port);

printf(“目的端口号:%dn”, destination_port);

switch(destination_port)

{

case 80:

printf(“上层协议为HTTP协议n”);

break;

case 21:

printf(“上层协议为FTP协议n”);

break;

case 23:

printf(“上层协议为TELNET协议n”);

break;

case 25:

printf(“上层协议为SMTP协议n”);

break;

case 110:

printf(“上层协议POP3协议n”);

break;

default:

break;

}

printf(“序列码:%un”, sequence);

printf(“确认号:%un”, acknowledgement);

printf(“首部长度:%dn”, header_length);

printf(“保留:%dn”, tcp_protocol->tcp_reserved);

printf(“标记:”);

if(flags &0x08)

printf(“PSH ”);

if(flags &0x10)

printf(“ACK ”);

if(flags &0x02)

printf(“SYN ”);

if(flags &0x20)

编程实现简单的TCP协议分析器

printf(“URG ”);

if(flags &0x01)

printf(“FIN ”);

if(flags &0x04)

printf(“RST ”);

printf(“n”);

printf(“窗口大小:%dn”, windows);

printf(“校验和:%dn”, checksum);

printf(“紧急指针:%dn”, urgent_pointer);} void ip_protocol_packet_callback(u_char *argument, const struct pcap_pkthdr *packet_header, const u_char *packet_content){

struct ip_header *ip_protocol;

/* IP协议变量 */

u_int header_length;

/* 长度 */

u_int offset;

/* 偏移 */

u_char tos;

/* 服务质量 */

u_int16_t checksum;

/* 校验和 */

ip_protocol =(struct ip_header*)(packet_content + 14);

/* 获得IP协议内容 */

checksum = ntohs(ip_protocol->ip_checksum);

/* 获得校验和 */

header_length = ip_protocol->ip_header_length *4;

/* 获得长度 */

tos = ip_protocol->ip_tos;

/* 获得服务质量 */

offset = ntohs(ip_protocol->ip_off);

/* 获得偏移 */ if(ip_protocol->ip_protocol==6)

{

printf(“-----------IP协议

-----------n”);

编程实现简单的TCP协议分析器

printf(“版本号:%dn”, ip_protocol->ip_version);

printf(“首部长度:%dn”, header_length);

printf(“服务质量:%dn”, tos);

printf(“总长度:%dn”, ntohs(ip_protocol->ip_length));

printf(“标识:%dn”, ntohs(ip_protocol->ip_id));

printf(“偏移:%dn”,(offset &0x1fff)*8);

printf(“生存时间:%dn”, ip_protocol->ip_ttl);

printf(“协议类型:%dn”, ip_protocol->ip_protocol);

printf(“上层协议为TCP协议n”);

printf(“校验和:%dn”, checksum);

printf(“源IP地址:%sn”, inet_ntoa(ip_protocol->ip_souce_address));

/* 获得源IP地址 */

printf(“目的IP地址:%sn”, inet_ntoa(ip_protocol->ip_destination_address));

/* 获得目的IP地址 */

} } void ethernet_protocol_packet_callback(u_char *packet_header, const u_char *packet_content){ static int packet_number = 1;

/* 数据包个数,静态变量 */ u_short ethernet_type;

/* 以太网类型 */

struct ether_header *ethernet_protocol;struct ip_header *ip_protocol;

/* IP协议变量 */

u_int header_length;

/* 长度 */

u_int offset;

/* 偏移 */

u_char tos;

/* 服务质量 */

u_int16_t checksum;

/* 校验和 */

ip_protocol =(struct ip_header*)(packet_content + 14);

/* 获得IP协议内容 */

checksum = ntohs(ip_protocol->ip_checksum);

*argument, const struct pcap_pkthdr 编程实现简单的TCP协议分析器

/* 获得校验和 */

header_length = ip_protocol->ip_header_length *4;

/* 获得长度 */

tos = ip_protocol->ip_tos;

/* 获得服务质量 */

offset = ntohs(ip_protocol->ip_off);

/* 获得偏移 */

/* 以太网协议变量 */ ethernet_protocol =(struct ether_header*)packet_content;ethernet_type = ntohs(ethernet_protocol->ether_type);/* 获得以太网类型 */ if(ethernet_type==0x0800 && ip_protocol->ip_protocol==6){ u_char *mac_string;

/* 以太网地址 */

printf(“**************************************************n”);

printf(“捕获第%d个TCP网络数据包n”, packet_number);

printf(“捕获时间:n”);

printf(“%s”, ctime((const time_t*)&packet_header->ts.tv_sec));

/* 获得捕获数据包的时间 */

printf(“数据包长度:n”);

printf(“%dn”, packet_header->len);

printf(“--------

以太网协议

--------n”);

/* 获得以太网协议内容 */

printf(“类型:n”);

printf(“%04xn”, ethernet_type);

printf(“源以太网地址: n”);

mac_string = ethernet_protocol->ether_shost;

printf(“%02x:%02x:%02x:%02x:%02x:%02xn”,*mac_string, *(mac_string *(mac_string + 2), *(mac_string + 3), *(mac_string + 4), *(mac_string + 5));

/* 获得源以太网地址 */

printf(“目的以太网地址: n”);

mac_string = ethernet_protocol->ether_dhost;

printf(“%02x:%02x:%02x:%02x:%02x:%02xn”, *mac_string, *(mac_string *(mac_string + 2), *(mac_string + 3), *(mac_string + 4), *(mac_string + 5));

/* 获得目的以太网地址 */

ip_protocol_packet_callback(argument, packet_header, packet_content);

+ 1),+ 1), 编程实现简单的TCP协议分析器

packet_number++;

printf(“**************************************************n”);

} } void main(){

pcap_t *pcap_handle;

/* Winpcap句柄 */

char error_content[PCAP_ERRBUF_SIZE];

/* 存储错误信息 */

char *net_interface;

/* 网络接口 */

struct bpf_program bpf_filter;

/* BPF过滤规则 */

char bpf_filter_string[] = "";

/* 过滤规则字符串 */

bpf_u_int32 net_mask;

/* 掩码 */

bpf_u_int32 net_ip;

/* 网路地址 */

net_interface = pcap_lookupdev(error_content);

/* 获得可用的网络接口 */

pcap_lookupnet(net_interface, &net_ip, &net_mask, error_content);

/* 获得网络地址和掩码地址 */

pcap_handle = pcap_open_live(net_interface, BUFSIZ, 1, 1, error_content);

/* 打开网路接口 */

pcap_compile(pcap_handle, &bpf_filter, bpf_filter_string, 0, net_ip);

/* 编译BPF过滤规则 */

pcap_setfilter(pcap_handle, &bpf_filter);

/* 设置过滤规则 */

if(pcap_datalink(pcap_handle)!= DLT_EN10MB)

return;

pcap_loop(pcap_handle,-1, ethernet_protocol_packet_callback, NULL);

/* 注册回调函数,循环捕获网络数据包,利用回调函数来处理每个数据包 */

pcap_close(pcap_handle);

/* 关闭Winpcap操作 */ }

编程实现简单的TCP协议分析器

七、测试数据

本地局域网IP数据包

八、测试情况

程序运行结果图:

编程实现简单的TCP协议分析器

编程实现简单的TCP协议分析器

结 论

通过两周的课程设计,增强了我的实际动手能力,通过实际的编程整合串联了我所学到的知识。另外我还学到了作为编程人员的一些基本素质,这为我毕业后找工作奠定了基础。

通过做TCP协议分析器学习的很多网络编程知识: 1.学会了winpcap网络数据报捕获开发包的使用; 2.绑定网卡函数bind(); 3.数据接受函数recv(); 4.Windows套接字编程;

5.学习了原始套接字编程的基本机制; 6.学习对数据包进行协议分析的基本方法。

通过做TCP协议分析器学习的很多Visual C++ Windows编程知识:

1.学会了Windows常用数据结构的使用;

2.学到了一些用Visual C++ Windows编程的技巧。

编程实现简单的TCP协议分析器

参考文献

[1] 甘玲 邱劲 《面向对象技术与Visual C++ 》 清华大学出版社 [2] 任哲 《MFC Windows 应用程序设计》清华大学出版社 [3] 《计算机网络》 北京:机械工业出版社

[4] 《Visual C++网络通信编程实用案例精选》 人民邮电出版社 [5] 《windows程序设计》 北京大学出版社

第二篇:计算机网络 课程设计 发送TCP数据包

课设名称:发送TCP数据包

班级:

学号:

姓名:

指导老师: 日期: 2012.6.15

计算机网络课程设计报告

目录

一.设计题目与要求........................................................................................................2

1.设计题目................................................................................................................2

2.设计要求................................................................................................................2

二.需求分析...................................................................................................................2三.详细设计...................................................................................................................2

1.创建一个原始套接字,并设置IP头选项.................................................................3

2.构造IP头和TCP头...............................................................................................3

3.计算校验和的子函数..............................................................................................4

4.流程图...................................................................................................................6

四.调试分析...................................................................................................................7

五.运行结果...................................................................................................................7

六.总结..........................................................................................................................8

七.源程序......................................................................................................................9

发送TCP数据包

一.设计题目与要求

1.设计题目

发送TCP数据包 2.设计要求

本设计的功能是填充一个TCP数据包,并发送给目的主机。

1)以命令行形式运行:TCP source_ip source_port dest_ip dest_port,其中SendTCP是程序名,source_ip为源端IP地址,source_port为源端口号,dest_ip为目的地址,dest_port为目的端口号。

2)其他的TCP头部参数请自行设定。3)数据字段为“hello”。

4)成功发送后在屏幕上输出“send OK”。

二.需求分析

1.本程序需完成发送一个TCP数据包给目的主机

2.程序的输入:TCP source_ip source_port dest_ip dest_port,然后根据提示输入要发送的数据,回车即可。

3.程序的输出:Send OK!

4.测试数据 TCP 192.168.1.100 200 192.168.1.101 200

三.详细设计

本课程设计的目标是发送一个TCP数据包,可以利用原始套接字来完成这个工作。整个程序由初始化原始套接字和发送TCP数据包两个部分组成。

2发送TCP数据包

1.创建一个原始套接字,并设置IP头选项

SOCKET sock;sock = socket(AF_INET,SOCK_RAW,IPPROTO_IP);或者:

sock=WSASoccket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED);这里,设置了SOCK_RAW标志,表示我们声明的是一个原始套接字类型。为使用发送接收超时设置,必须将标志位置位置为WSA_FLAG_OVERLAPPED。在本课程设计中,发送TCP包时隐藏了自己的IP地址,因此我们要自己填充IP头,设置IP头操作选项。其中flag设置为ture,并设定 IP_HDRINCL 选项,表明自己来构造IP头。

setsockopt(sock, IPPROTO_IP, IP_HDRINCL,(char *)&Flag, sizeof(Flag));int timeout=1000; setsockopt(sock, sizeof(timeout));在这里我们使用基本套接字SOL_SOCKET,设置SO_SNDTIMEO表示使用发送超时设置,超时时间设置为1000ms。2.构造IP头和TCP头

这里,IP头和TCP头以及TCP伪部的构造请参考下面它们的数据结构。

typedef struct _iphdr //定义IP首部 { UCHAR h_lenver;//4位首部长度+4位IP版本号 UCHAR tos;//8位服务类型TOS

USHORT total_len;//16位总长度(字节)USHORT ident;//16位标识

USHORT frag_and_flags;//3位标志位 UCHAR ttl;//8位生存时间 TTL

UCHAR proto;//8位协议(TCP, UDP 或其他)

SOL_SOCKET,SO_SNDTIMEO,(char*)&timeout,3发送TCP数据包

USHORT checksum;//16位IP首部校验和 ULONG sourceIP;//32位源IP地址

ULONG destIP;//32位目的IP地址

}IP_HEADER;typedef struct psd_hdr //定义TCP伪首部 { ULONG saddr;ULONG daddr;//源地址 //目的地址

UCHAR mbz;//没用 UCHAR ptcl;

USHORT tcpl;//协议类型 //TCP长度

}PSD_HEADER;typedef struct _tcphdr //定义TCP首部 { USHORT th_sport;//16位源端口 USHORT th_dport;//16位目的端口 ULONG th_seq;//32位序列号 ULONG th_ack;//32位确认号

UCHAR th_lenres;//4位首部长度/6位保留字 UCHAR th_flag;//6位标志位 USHORT th_win;//16位窗口大小 USHORT th_sum;//16位校验和 USHORT th_urp;//16位紧急数据偏移量

}TCP_HEADER;

3.计算校验和的子函数

在填充数据包的过程中,需要调用计算校验和的函数checksum两次,分别用于校验IP头和TCP头部(加上伪头部),其实现代码如下:

USHORT checksum(USHORT *buffer, int size)

4发送TCP数据包

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

5发送TCP数据包

4.流程图

开始构造原始套接字并初始化填充IP首部计算IP首部校验和构造TCP伪首部填充TCP首部计算TCP首部校验和填充发送缓冲区填入目的地址发送数据包结束

6发送TCP数据包

四.调试分析

本程序流程简单,调试过程中没有出现大的问题。

调试过程中没有出现重大的语法错误,主要是运行的结果不理想,和预期的结果有差距。填充数据包的程序部分是不容易出错的。至于数据包的发送,由于是利用函数sendto()来实现的,而sendto()是面向UDP的,将协议类型修改为UDP(Header.proto=IPPROTO_UDP;)后,调试运行成功,问题得到解决。

调试时,要添加 #include #include #pragma comment(lib,“ws2_32.lib”)不然编译出错。

五.运行结果

1.输入:TCP 192.168.1.100 200 192.168.1.101 200

7发送TCP数据包

2.输入要发送的字符串:“hello”按Ctrl+Z发送

六.总结

通过本次课程设计,我对发送TCP数据包的原理有了一定的了解。理解了TCP数据报的报文格式、TCP连接时的三次握手和TCP连接结束时的四次握手的过程及它们的作用。此外,在设计过程中,通过查阅资料,也让我对TCP的三大特点(流量控制、差错控制、拥塞控制)有了认识。,在课程设计过程中,由于编程知识的欠缺,使我在课程设计过程中不是很顺利,编程知识的欠缺是我的最大障碍,不过,这也给了我动力,我会努力去学好编程的相关知识,为以后的学习和工作打下基础。最后,感谢老师安排了此次课程设计。

发送TCP数据包

七.源程序

#include #include #include #include #include #include #include #include #pragma comment(lib,“ws2_32.lib”)

#define IPVER 4 //IP协议预定 #define MAX_BUFF_LEN 65500 //发送缓冲区最大值

typedef struct ip_hdr //定义IP首部 {

UCHAR h_verlen;//4位首部长度,4位IP版本号 UCHAR tos;//8位服务类型TOS USHORT total_len;//16位总长度(字节)USHORT ident;//16位标识 USHORT frag_and_flags;//3位标志位 UCHAR ttl;//8位生存时间 TTL UCHAR proto;//8位协议(TCP, UDP 或其他)USHORT checksum;//16位IP首部校验和 ULONG sourceIP;//32位源IP地址 ULONG destIP;//32位目的IP地址

发送TCP数据包

}IP_HEADER;

typedef struct tsd_hdr //定义TCP伪首部 {

ULONG saddr;//源地址 ULONG daddr;//目的地址 UCHAR mbz;//没用 UCHAR ptcl;//协议类型 USHORT tcpl;//TCP长度

}PSD_HEADER;

typedef struct tcp_hdr //定义TCP首部 {

USHORT th_sport;//16位源端口 USHORT th_dport;//16位目的端口 ULONG th_seq;//32位序列号 ULONG th_ack;//32位确认号

UCHAR th_lenres;//4位首部长度/6位保留字 UCHAR th_flag;//6位标志位 USHORT th_win;//16位窗口大小 USHORT th_sum;//16位校验和

USHORT th_urp;//16位紧急数据偏移量

}TCP_HEADER;

//CheckSum:计算校验和的子函数

USHORT checksum(USHORT *buffer, int size){ unsigned long cksum=0;while(size >1)

发送TCP数据包

{ cksum+=*buffer++;size-=sizeof(USHORT);} if(size){ cksum += *(UCHAR*)buffer;} cksum =(cksum >> 16)+(cksum & 0xffff);cksum +=(cksum >>16);return(USHORT)(~cksum);}

int ReadData(char *str,int maxlen){ int readlen=0;char ch=NULL;if(str==NULL||maxlen<=0){

printf(“ReadData Error!!n”);

return 0;//failed } printf(“Input Data(End By Ctrl+Z): n”);while(maxlen){

ch=getchar();

if(ch==EOF)break;

str[readlen++]=ch;maxlen--;

发送TCP数据包

} } str[readlen]=NULL;return readlen;int main(int argc, char* argv[]){ WSADATA WSAData;SOCKET sock;

IP_HEADER ipHeader;TCP_HEADER tcpHeader;PSD_HEADER psdHeader;

char Sendto_Buff[MAX_BUFF_LEN];//发送缓冲区

unsigned short check_Buff[MAX_BUFF_LEN];//检验和缓冲区 char tcp_send_data[1000];

BOOL flag;int rect,nTimeOver;if(argc!= 5){ printf(“Usage: SendTcp soruce_ip source_port dest_ip dest_port n”);return false;} read_data_len=ReadData(tcp_send_data,1000);int read_data_len=0;

发送TCP数据包

if(read_data_len<=0)return 1;

if(WSAStartup(MAKEWORD(2,2), &WSAData)!=0){ printf(“WSAStartup Error!n”);return false;} if((sock=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,NULL,0, WSA_FLAG_OVERLAPPED))==INVALID_SOCKET){ printf(“Socket Setup Error!n”);return false;} flag=true;if(setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeof(flag))==SOCKET_ERROR){ printf(“setsockopt IP_HDRINCL error!n”);return false;} nTimeOver=1000;if(setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO,(char*)&nTimeOver, sizeof(nTimeOver))==SOCKET_ERROR){ printf(“setsockopt SO_SNDTIMEO error!n”);return false;}

发送TCP数据包

//填充IP首部

ipHeader.h_verlen=(IPVER<<4 | sizeof(ipHeader)/sizeof(unsigned long));ipHeader.tos=(UCHAR)0;ipHeader.total_len=htons((unsigned short)sizeof(ipHeader)+sizeof(tcpHeader)+read_data_len);ipHeader.ident=0;//16位标识 ipHeader.frag_and_flags=0;//3位标志位 ipHeader.ttl=128;//8位生存时间 ipHeader.proto=IPPROTO_TCP;//协议类型 ipHeader.checksum=0;//检验和暂时为0 ipHeader.sourceIP=inet_addr(argv[1]);//32位源IP地址 ipHeader.destIP=inet_addr(argv[3]);//32位目的IP地址

//计算IP头部检验和

memset(check_Buff,0,MAX_BUFF_LEN);memcpy(check_Buff,&ipHeader,sizeof(IP_HEADER));ipHeader.checksum=checksum(check_Buff,sizeof(IP_HEADER));

//构造TCP伪首部

psdHeader.saddr=ipHeader.sourceIP;psdHeader.daddr=ipHeader.destIP;psdHeader.mbz=0;psdHeader.ptcl=ipHeader.proto;psdHeader.tcpl=htons(sizeof(TCP_HEADER)+read_data_len);

//填充TCP首部

tcpHeader.th_dport=htons(atoi(argv[4]));//16位目的端口号 tcpHeader.th_sport=htons(atoi(argv[2]));//16位源端口号

发送TCP数据包

tcpHeader.th_seq=0;//SYN序列号 tcpHeader.th_ack=0;//ACK序列号置为0 //TCP长度和保留位

tcpHeader.th_lenres=(sizeof(tcpHeader)/sizeof(unsigned long)<<4|0);tcpHeader.th_flag=2;//修改这里来实现不同的标志位探测,2是SYN,1是//FIN,16是ACK探测 等等

tcpHeader.th_win=htons((unsigned short)16384);//窗口大小 tcpHeader.th_urp=0;//偏移大小 tcpHeader.th_sum=0;//检验和暂时填为0

//计算TCP校验和

memset(check_Buff,0,MAX_BUFF_LEN);memcpy(check_Buff,&psdHeader,sizeof(psdHeader));

memcpy(check_Buff+sizeof(psdHeader),&tcpHeader,sizeof(tcpHeader));

//填充发送缓冲区

memset(Sendto_Buff,0,MAX_BUFF_LEN);memcpy(Sendto_Buff,&ipHeader,sizeof(IP_HEADER));

memcpy(Sendto_Buff+sizeof(IP_HEADER), &tcpHeader,sizeof(TCP_HEADER));memcpy(check_Buff+sizeof(PSD_HEADER)+sizeof(TCP_HEADER), tcp_send_data,read_data_len);tcpHeader.th_sum=checksum(check_Buff,sizeof(PSD_HEADER)+ sizeof(TCP_HEADER)+read_data_len);memcpy(Sendto_Buff+sizeof(IP_HEADER)+sizeof(TCP_HEADER), tcp_send_data,read_data_len);

发送TCP数据包

int datasize=sizeof(IP_HEADER)+sizeof(TCP_HEADER)+read_data_len;//发送数据报的目的地址 SOCKADDR_IN dest;memset(&dest,0,sizeof(dest));dest.sin_family=AF_INET;dest.sin_addr.s_addr=inet_addr(argv[3]);dest.sin_port=htons(atoi(argv[4]));

rect=sendto(sock,Sendto_Buff,datasize, 0,(struct sockaddr*)&dest, sizeof(dest));if(rect==SOCKET_ERROR){ printf(“send error!:%dn”,WSAGetLastError());return false;} else

closesocket(sock);WSACleanup();return 1;} printf(“nsend ok!n”);

第三篇:计算机网络课程设计

1.课题描述........................................................1 2 系统设计概述...................................................1 3 课程设计的主要内容............................................2 3.1站点总体设计原则及设计目标....................................2 3.2用户需求......................................................2 3.3动态IP地址的设置及服务器的配置...............................3 3.3.1.动态IP配置简介...........................................3 3.3.2.配置DHCP服务器...........................................3 3.3.3配置IIS服务器.............................................6 3.4制作网站......................................................6 3.4.1.建站流程..................................................6 3.4.2.网站各模块的设计...........................................7 3.4.3.建站实现软件...............................................8 3.5.建站注意要点..................................................9 3.5.1.前期调研分析...............................................9 3.5.2.网站的目的及功能定位.......................................9 3.5.3网站技术解决方案...........................................9 3.5.4.网站内容规划.............................................10 3.5.5.网页设计.................................................10 3.5.6.网站测试..................................................10 4.网站维护.......................................................10 4.1、静态页面的添加修改..........................................10 4.2、动态功能支持在线更新........................................10

总结..............................................................12 参考文献.........................................................12

1.课题描述

计算机网络近年来获得了飞速的发展。计算机通信网络以及Internet已成为我们社会结构的一个基本组成部分。网络被应用于工商业的各个方面,电子银行、电子商务、企业管理、信息服务业等都以计算机网络系统为基础。从学校远程教育到公司日常办公乃至现在的电子社区,很多方面都离不开网络技术。可以不夸张地说,网络在当今世界无处不在。

网络的发展也是一个经济上的冲击。数据网络使个人化的远程通信成为可能,并改变了商业通信的模式。一个完整的用于发展网络技术、网络产品和网络服务的新兴工业已经形成,计算机网络的普及性和重要性已经导致了在不同岗位上对具有更多网络知识的人才的大量需求。企业需要雇员来规划、获取、安装、操作、管理那些构成计算机网络的软硬件系统,建立自己的网站,方便办公及交流 系统设计概述

传统的企业内部办公存在着种种弊端,往往造成人员和资源的极大浪费,应用网络技术组建余个高效、快捷、安全的办公环境成为许多企业和单位的当务之急。与传统的单机工作相比,网络化办公具有以下几个明显优点: 1共享软硬件资源,节约资金投入,提高运作效率

企业内部组件web站点后,可以在一个部门只安装一台打印机和扫描仪,其他计算机通过局域网共享这些设备和数据,有利于降低成本。2对重要数据进行安全、集中的管理

组建站点后,可以把一些重要数据放置在专门的网络服务器上集中管理,并通过网络服务器的访问控制限制其他计算机对总要数据的访问。这样就可以有效管理企业内部的重要数据,保证数据安全性,防止数据丢失和被窃取。3方便企业内部信息发布与交流

当企业进行诸如企业内部新闻、电话号码、产品文档、技术文件等信息发布时,可以把这些信息放置在web站点的共享目录上,供员工下载,方便了信息的发布和接收。4便于员工的协调操作

利用内部的办公网,可以方便的对同一事务进行协同处理,提高工作效率,缩短任务完成的时间

图2.1企业内部网络拓扑 课程设计的主要内容

3.1站点总体设计原则及设计目标

组建企业内部web站点要注意站点的分块、共享、安全性、可管理性、以及可维护性。在设计中,系统结构模块化,软硬件平台可以模块化瓶装,系统配置灵活,使系统具有强大的可增长性和强壮性。满足多层次安全控制手段,建立完善的安全管理体系,防止数据的丢失和被窃取。

组建企业内部web站点,既能将公司内部所有计算机纳入系统中去,实现统一规划、分块工作、异地互联、整体管理,并可为将来的应用扩展升级预留接口。

3.2用户需求 作为企业内部网络需要满足:

1、办公事务管理

主要包括公文与文档管理、公告、大事记、会议纪要、资产与办公用品管理、行政制度、办公事务讨论等。

2、人力资源管理

主要包括员工档案、岗位职责、员工通信录、认识管理规范等。

3、财务资产管理

主要包括固定资产管理、工资管理、经费管理等。

4、网站管理

主要包括用户及权限设置、数据库维护、网页设置、标志与标题设置及网络各栏目内容编辑等功能。

3.3动态IP地址的设置及服务器的配置

3.3.1.动态IP配置简介

动态IP地址,顾名思义就是设备所取得的IP地址是非固定的,是可以动态分配和取得的。使用动态IP地址的原因主要有两个:一是可以用较少的IP地址构建较大的网络。如果与连入网络的主机和其它设备相比,所分得的公用IP地址略少一些,如果为每个设备都分配一个固定的IP地址,则显然部分计算机将不能接入网络。考虑到并非所有的计算机都在同一时间内运行并与网络连接,所以,如果将IP进行动态分配,即计算机连入网络时自动取得,断开与网络的连接时自动收回,即可满足网络对IP地址的需求。二是可以增加网络内计算机的可移动性。当某台主机从一个子网移动到另一个子网时,由于IP地址中网络号的不同,从而导致该计算机与其它主机间无法进行通信,解决该类问题最简单的方式就是为移动的主机在新子网中重新分配IP地址。但是,如果采用动态IP地址,就会减少这种网络管理的复杂性。Windows NT使用DHCP来解决动态IP地址的分配问题。使用DHCP时,整个网络中必须至少有一台运行Windows NT主机安装有DHCP软件,充当DHCP服务器,而其它所有欲使用DHCP功能的工作站也必须具有支持DHCP的功能。这样,当DHCP工作站启动时,它就会自动与DHCP服务器通信,并由DHCP服务器为其提供一个IP地址。当然,这个地址只是临时的 3.3.2.配置DHCP服务器

DHCP提供了计算机IP地址的动态配置,如果需要服务器为域中的计算机动态分配IP地址,则必须配置DHCP服务器。配置DHCP服务器的具体步骤如下:

图3.1打开服务器配置向导

图3.2配置服务器向导

图3.3配置服务器向导

图3.4为配置服务器向导

图3.5管理服务器

图3.6 再来就是通过“开始”选择“控制面板”|“添加或删除程序”也可以安装DHCP。

3.3.3配置IIS服务器

右键单击“我的电脑”选择“管理”~服务及应用程序~Internet信息服务~网站~默认网站,单击右键,选择属性,打开主目录,设置主目录为web站点的根目录,也可选择修改其他属性

图3.7配置IIS服务器

3.4制作网站

3.4.1.建站流程

建立网站的流程大致可以分成三个阶段,如图所示

图3.8网站的流程框图

构建内容信息、搜索整理资料和规划网站结构是建立网站的

企业的每一个员工都存在向企业内部网发布内容的潜在可能性。但员工必须按照他们各自的角色协调作业活动。不同规模的公司都需要以省时省钱的方式组织交互信息发布的流程。

通常情况下,为在网站上发布内容,作者创建的材料要经过一个或多个编辑的审校和核准。在这个过程中,作者及编辑按照各种特定的标准分类及标注信息,并为发布设计页面及连接。这一流程通常不是正式的,且要接受网络管理员的协调,这就导致了管理员在“站点发布狂潮”到来时,或是当用户对实时信息需求迅速增长时陷入孤立无援的境地。

使用Site Server可以解决,Site Server还定义了一套为站点增添内容的四步流程,既提交、标注、核准和部署。

图3.9新闻发布系统框图

3.4.3.建站实现软件

可以用Dreamweaver,主要包括两种页面,即html和asp。

HTML(Hyper Text Markup Language ,超文本标记语言),或称为“多媒体文件语言”,是用于创建Web页和Web 信息发布的

(1)通用性:可实现不同平台的文档共享。

(2)可扩展性:HTML的标签集合可以根据新需求而不断修正或加入有限的新标签符, 为实现有限的新功能的扩展提供保障。

(3)创建的灵活性:HTML文档是纯文本文档, 可以由网页编辑器以及其他文本编辑软件创建。

HTML是“Hyper Text Markup Language”的缩写,它是一种超文本标记语言,是网页的描述语言,用于编制通过万维网显示的超文本文件。它是目前在网页设计中,所使用的最基本的标记语言。现在很多HTML 的编辑器,都是通过跟文字处理器相似的接口来编辑网页的。

ASP 文件和 HTML 文件类似ASP 文件可包含文本、HTML、XML 和脚本 ASP 文件中的脚本可在服务器上执行。ASP 文件的扩展名是 “.asp”.当浏览器请求某个 HTML 文件时,服务器会返回这个文件.而当浏览器请求某个 ASP 文件时,IIS 将这个请求传递至 ASP 引擎。ASP 引擎会逐行地读取这个文件,并执行文件中的脚本。最后,ASP 文件将以纯 HTML 的形式返回到浏览器。ASP 指 Active Server Pages(动态服务器页面)ASP 是运行于 IIS 之中的程序.3.5.建站注意要点

另外在网页制作过程中应注意以下要点: 3.5.1.前期调研分析

了解网页制作后具体的工作人员具体权限,以保证公司机密信息不会被泄露,同时又能让每个人从网站上获取足够的工作信息;同时对于私人隐私的公开应得到个人的允许。在注意到以上的同时,还要考虑公司的自身情况、建设网站的能力等 3.5.2.网站的目的及功能定位

本次为企业内部web站点的构建及维护 3.5.3网站技术解决方案

确定服务器,是自建服务器还是租用虚拟主机。选择操作系统。网站安全性措施,如:防入侵,防病毒,防窃取方案

3.5.4.网站内容规划

根据网站的目的和功能规划网站内容。一般企业内部网站应包括:公司简介、部门简介、公共信息、新闻发布、员工联系方式、任务信息、信息搜索查询、相关帮助等内容。

3.5.5.网页设计

网页美术设计要求。网页美术设计一般要求与企业整体形象一致,企业内部网色彩要与办公环境保持和谐 3.5.6.网站测试

①网站发布前要进行细致周密的测试,以保证正常的浏览和使用。主要测试内容有: ②服务器稳定性、安全性。③程序及数据库测试

④网页兼容性测试,包括不同浏览器下的现实结果、不同显示器分辨率的页面效果等。⑤需要的其他测试

4.网站维护

服务器及相关软硬件的维护,对可能出现的问题进行评估,制定相应时间。数据库维护。有效地利用数据是网站维护的重要内容,因此数据库的维护要受到重视。

内容的更新、调整计划。

制定相关网站维护的规定,将网站维护制度化、规范化。

4.1、静态页面的添加修改

静态页面的更新需要使用专业的网页设计工具,然后将修改后的网页通过FTP上传到相应的位置,在此同时还要保证不能破坏其他的页面程序和格局

4.2、动态功能支持在线更新

如果企业信息量很大,如工作信息经常需要更新,有更多的企业资讯需要告诉员工,企业建立动态数据库系统。这里的动态并不是指动画,而是指网站的内容来自企业的数据库。如果更改了数据库,那么前台页面的内容也会随之而更改。

总 结

通过这次课程设计,我拓宽了知识面,锻炼了能力,综合素质得到较大提高。安排课程设计的基本目的,在于通过理论与实际的结合、人与人的沟通,进一步提高思想觉悟。尤其是观察、分析和解决问题的实际工作能力,以便培养成为能够主动适应社会主义现代化建设需要的高素质的复合型人才。作为整个学习体系的有机组成部分,课程设计虽然安排在一周进行,但并不具有绝对独立的意义。它的一个重要功能,在于运用学习成果,检验学习成果。运用学习成果,把课堂上学到的系统化的理论知识,尝试性地应用于实际设计工作,并从理论的高度对设计工作的现代化提出一些有针对性的建议和设想。检验学习成果,看一看课堂学习与实际工作到底有多大距离,并通过综合分析,找出学习中存在的不足,以便为完善学习计划,改变学习内容与方法提供实践依据。对计算机专业的本科生来说,实际能力的培养至关重要,必须从课堂走向实践。这也是一次预演和准备毕业设计工作。通过课程设计,让我找出自身状况与实际需要的差距,并在以后的学习期间及时补充相关知识,为求职与正式工作做好充分的知识、能力准备,从而缩短从校园走向社会的心理转型期。课程设计促进了我系人才培养计划的完善和课程设置的调整。在一个星期的课程设计之后,我感到不仅实际动手能力有所提高,更重要的是通过对网站开发流程以及维护方面的了解,进一步激发了我对专业知识的兴趣,并能够结合实际存在的问题在专业领域内进行更深入的学习。

在课程设计过程中,我学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪,黑夜过去了,我收获的是黎明。

参考文献

[1]朱兵.小型网组建与应用进阶[M].南方出版社.2004.[2]邓文达胡伏湘.计算机网络教程[M].清华大学出版社.2007.[3] 赵永超.新编网站规划与设计教程[M].西北工业大学出版社.2004.[4] 杨力学.ASP商业网站整站集成开发[M].电子工业出版社.2007.[5] 石志国.ASP动态网站编程[M].清华大学出版社.2001.[6] 李岚.网络设计与维护[M].中国物资出版社.2002.

第四篇:计算机网络课程设计

计算机网络课程设计

报告书

学院:

班级:通信0902

姓名:

学号:

指导老师:

实验三 交换机VLAN实验

SWITCH2的拓扑图

规划IP:

PCA的ip为:10.65.1.1

PCB的ip为:10.66.1.1

PCC的ip为:10.65.1.3

PCD的ip为:10.66.1.3

SWA:

SWB:

设置VLAN: SWA:

SWB:

不设trunk时测试可通性 从PCA到PCC测试:不通,因现在的连线两端在VLAN1中,不能承载Vlan2的信息

[root@PCA root]# ping 10.65.1.3

从PCA到PCB测试:不通:不是一个网段,且不在一个VLAN [root@PCA root]# ping 10.66.1.1

从PCB到PCD测试:通:因为在同一网段内。路径:从switch A的f0/6到switch B的f0/6 [root@PCB root]# ping 10.66.1.3

从PCA到SWA测试:不通:不在同一网段内

[root@PCA root]# ping 10.66.1.7

从PCA到SWB测试:不通:不在同一网段,也不在同一vlan [root@PCA root]# ping 10.66.1.8

从SWA到PCA测试:不通:不在同一网段

SWA#ping 10.65.1.1

从SWA到SWB测试:通:在同一个网段中,路径:从switch A的f0/8到switch B的f0/1 SWB#ping 10.66.1.8

swa40#conf t swa40(config)#int f0/8 swa40(config-if)#switchport mode trunk swa40(config-if)#int f0/1 swa40(config-if)#switchport mode trunk swa40(config-if)#

从PCA到PCC、PCD、SWA、SWB的可通性依次为通,不通,不通,不通。

PCA和PCC在同一网段中,路径:从switch A的f0/3到switch B的f0/3,PCA和PCD、SWA、SWB不在同一网段内。

从PCB到PCC、PCD、SWA、SWB的可通性依次为不通,通,通,通。PCB与PCC不在同一网段,PCB与PCD、SWA、SWB在同一网段内,路径分别为从switch A的f0/6到switch B的f0/6;从PCB到switch A的f0/6;从switch A的f0/6到switch B的f0/1.SWITCH3的拓扑图

(1)都不设vlan情况下,测试连通性

从PCA到PCC,PCD,SWA,SWB依次为 不通,不通,通,不通 PCA与PCC、PCD不在同一默认vlan中,PCA与SWA在同一默认vlan中,路径:从PCA到switch A的f0/3,PCA与SWB不在同一默认vlan中。

从PCB到PCC,PCD,SWA,SWB依次为不通,不通,通,不通。PCB与PCC、PCD不在同一默认vlan中,PCB与SWA在同一默认vlan中,路径:从PCB到switch A的f0/6,PCB与SWB不在同一默认vlan中。

(2)设置有vlan情况下,测试连通性

从PCA到PCC、PCB、SWA、SWB、PCD均不通:不在同一vlan

从PCB到PCC、PCD、SWA、SWB测试为不通,不通,通,不通。PCB与PCC、PCD不在同一默认vlan中,PCB与SWA在同一默认vlan中,路径:从PCB到switch A的f0/6,PCB与SWB不在同一默认vlan中。

(3)使用trunk情况下,测试连通性

从PCA到PCC、PCD、SWA、SWB的可通性依次为不通,通,不通,不通。PCA与PCC、PCD不在同一默认vlan中,PCA与SWA在同一默认vlan中,路径:从PCA到switch A的f0/3,PCA与SWB不在同一默认vlan中。

从PCB到PCC、PCD、SWA、SWB的可通性依次为通,不通,通,通。PCB到PCC设置了trunk,路径:从switch A的f0/6到switch C的f0/1到switch B的f0/1,PCB与PCD不在同一vlan,PCB与SWA、SWB设置了trunk,路径:从PCB到switch A的f0/6,从switch A的f0/6到switch C的f0/1到switch B的f0/1

实验六 路由器接口的secondary ip 装入图文件:router1e

设置计算机的IP和网关:

PCA:PCA的IP地址:10.65.1.1 网关指向:10.65.1.2

PCB:PCB的IP地址:10.66.1.1 网关指向:10.66.1.2

设置交换机的IP地址: switch(config)#int vlan 1 switch(config-if)#ip address 10.66.1.8 255.255.0.0

设置路由器的接口f0/0的有两个ip地址。roa(config)int f0/0

roa(config-if)#ip address 10.65.1.2 255.255.0.0 roa(config-if)#no shut roa(config-if)#ip address 10.66.1.2 255.255.0.0 secondary roa(config-if)#no shut roa#sh run

测试可通性

[root#PCA root]# ping 10.66.1.1

通:在同一网段,路径:从switch的f0/3到f0/6

[root#PCA root]# ping 10.66.1.2 通

[root#PCB root]# ping 10.65.1.1

通:在同一vlan中,从switch的f0/6到f0/3

[root#PCB root]# ping 10.65.1.2

switch#ping 10.65.1.1

不通:不在同一网段

switch#ping 10.66.1.1

通:在同一网段,路径:从switch的f0/6到PCB

如果去掉交换机与路由的连线,PCA和PCB还可以通吗? 不通:不在同一网段,需通过路由寻址,去掉线就不能通了。

可见PCA到PCB的发包是经过路由器的,称之为单臂路由。

这种情况PCA和PCB在同广播域中,对工作带宽不利。如果划分VLAN可以隔离广播 实验七 使用路由器子接口路由情况

装入图文件:router1e

此实验计算机和交换机的IP地址和网关不变,但要求交换机工作在两个VLAN的情况下,一个是原有的默认VALN,另一个是新设置的VLAN 2,含f0/

5、f0/6。1.设置交换机,增加一个vlan 2 switch#vlan database Switch(vlan)#vlan 2 Switch(vlan)#exit Switch#conf t Switch(config)#hostname SWA SWA(config)#int f0/5 SWA(config-if)#switchport access vlan 2 SWA(config-if)#int f0/6 SWA(config-if)#switchport access vlan 2 SWA(config-if)#int f0/1 SWA(config-if)#switchport mode trunk SWA(config-if)# SWA#sh vlan SWA#sh run(检查设置情况)

2.路由器f0/0 有两个子接口 roa(config)int f0/0 roa(config-if)#int f0/0.1 roa(config-subif.1)#encapsulation isl 1 roa(config-subif.1)#ip address 10.65.1.2 255.255.0.0 roa(config-subif.1)#no shut roa(config-subif.1)#int f0/0.2 roa(config-subif.2)#encapsulation isl 2 roa(config-subif.2)#ip address 10.66.1.2 255.255.0.0 roa(config-subif.2)#no shut roa#sh run

3.测试可通性:都通,路由器设置了两个子接口,使其在同一vlan中 [root#PCA root]# ping 10.66.1.1

通,路径:从PCA到switch A的S0/3到switch A的S0/1到ROA的F0/0到switch A的S0/1到switch A的S0/6到PCB

[root#PCA root]# ping 10.66.1.2

通:从PCA到switch A的S0/3到switch A的S0/1到ROA 的F0/0到switch A的S0/1到switch A的S0/6到PCB,)

[root#PCB root]# ping 10.65.1.1

通:从PCB到switch A的S0/6到switch A的S0/1到ROA的F0/0到switch A 的S0/1到switch A 的S0/3到PCA)

[root#PCB root]# ping 10.65.1.2

通:从PCB到switch A的S0/6到switch A的S0/1到ROA的F0/0到switch A的S0/1到switch A的S0/3到PCA

在使用一个路由器接口的情况下,如果下接的网络含有不同的VLAN,则要求路由器的接口要划分成子接口,并绑定isl协议。在交换机上通过多个VLAN的接口,要设置成trunk。如果去掉交换机与路由的连线,PCA和PCB还可以通吗? 不通:不在同一网段,需通过路由寻址,去掉线就不能通了。

可见这也是一种单臂路由。

实验九 三个路由器的静态路由

装入图文件:router3

设置ROA的IP: f0/0: 10.65.1.2-->PCA:10.65.1.1 f0/1: 10.66.1.2-->PCB:10.66.1.1 s0/0: 10.67.1.2

s0/1: 10.68.1.2-->

设置ROB的IP:

s0/0: 10.68.1.1 <--s0/1: 10.69.1.2--> f0/0: 10.70.1.2

f0/1: 10.71.1.2

设置ROC的IP:

s0/0: 10.69.1.1 <--s0/1: 10.72.1.2

f0/0: 10.73.1.2-->PCC:10.73.1.1 f0/1: 10.74.1.2-->PCD:10.74.1.1

设置从PCA到PCC的静态路由 ROA(config)#ip routing ROA(config)#ip route 10.73.0.0 255.255.0.0 10.68.1.1 ROA#show ip route

ROB(config)#ip route 10.73.0.0 255.255.0.0 10.69.1.1 ROB#show ip route

[root@PCA root]#ping 10.73.1.1

通:由于与ROA和ROC相连的ROB接口都在同一个网段上,所以能通,路径:从PCA到switch B的F0/0 S0/1到switch A的S0/0 S0/1到switch C的S0/0 F0/1到PCD

使用默认路由

ROA(config)#no ip route 10.73.0.0 255.255.0.0 10.68.1.1 [root@PCA root]#ping 10.73.1.1

通:因为装入文件时有默认的动态路由存在路径:从PCA到switch B的F0/0 S0/1到switch A的S0/0 S0/1到switch C的S0/0 F0/1到PCD

ROA(config)#ip route 0.0.0.0.0.0.0.0 10.68.1.1 [root@PCA root]#ping 10.73.1.1 通:从PCA到switch B的F0/0 S0/1到switch A的S0/0 S0/1到switch C的S0/0 F0/1到PCD)

实验十 三个路由器动态路由实验

装入图文件:router3

实验网络与上个实验相同,ip地址也不变,现在用动态路由实现网络的连通。ROA(config)#ip routing

ROA(config)#router rip ROA(config-router)#network 10.0.0.0

ROB(config)#ip routing

ROB(config)#router rip ROB(config-router)#network 10.0.0.0

ROC(config)#ip routing

ROC(config)#router rip ROC(config-router)#network 10.0.0.0

ROA#sh ip route

ROB#sh ip route

ROC#sh ip route

从计算机PCA 测试到各点的连通性。都通:由于路由器接口都已经激活,可以相互连通:路径:PCA到PCB:从PCA到switch B的F0/0 F0/1到PCB

PCA到PCC:从PCA到switch B的F0/0 S0/1到switch A的S0/0 S0/1到switch C的S0/0 F0/0到PCC PCA到PCD :从PCA到switch B的F0/0 S0/1到switch A 的S0/0 S0/1到switch C的S0/0 F0/1到PCD

实验十一 基本访问控制列表

装入文件1

1.配置路由达到网络各点可通。

本实验使用有动态路由,也可以使用静态路由。假设网络是通畅的。ROA f0/0: 10.65.1.2-->PCA:10.65.1.1 ROA f0/1: 10.66.1.2-->PCB:10.66.1.1 ROA s0/0: 10.67.1.2

ROA s0/1: 10.68.1.2--> ROB s0/0: 10.68.1.1 <--ROB s0/1: 10.69.1.2--> ROB f0/0: 10.70.1.2

ROB f0/1: 10.71.1.2

ROC s0/0: 10.69.1.1 <--ROC s0/1: 10.72.1.2 ROC f0/1: 10.73.1.2-->PCC:10.73.1.1 ROC f0/0: 10.74.1.2-->PCD:10.74.1.1 1.基本的访问控制列表: 先从PCA ping PCD: [root@PCA @root]#ping 10.74.1.1 应该是可以通的。由于与ROA和ROC相连的ROB接口都在同一个网段上,路径:从 PCA到switch B的F0/0 S0/1到switch A的S0/0 S0/1到switch C的S0/0 F0/1到PCD

在ROB的s0/0写一个输入的访问控制列表: ROB(config)#access-list 1 deny any ROB(config)#int s0/0 ROB(config-if)#ip access-group 1 in ROB#sh access-list 测试PCA至PCD的联通性。(deny)命令所示为S0/0读入控制,题意ROB S0/0为10.68.1.1,PCA的IP为10.65,1,1不包含于ROB VLAN中,所以不能访问

测试PCC至PCD的联通性。(permit)在同一个路由器下,通过路由器寻址能找到对方的IP,所以能通, PCC到switch C的f0/0 F0/1到PCD

测试PCD至PCA的联通性。(permit)由题意由于命令所示为S0/0读入控制,所以ROB能访问ROA,所以访问列表设置无效,所以两者之间的访问不受控制,所以能PING通, 从PCD到SWC的F0/1 S0/0到SWA的S0/0 S0/0到SWB的S0/1 F0/0到PCA

2.删除这个列表

ROB(config)#no access-list 1 ROB(config)# int s0/0 ROB(config-if)#no ip access-group 1 in

二者都可能实现去掉访问列表的目的。前者是从列表号角度删除,后者是从接口及输入和输出的角度删除。可以通过sh run 和sh access-list 命令查看删除情况。3.再写访问控制列表

ROA(config)#access-list 1 deny 10.65.1.1 ROA(config)#access-list 1 permit any ROA(config)#int s0/1 ROA(config-if)#ip access-group 1 out ROA#sh access-list

再测试PCA至PCD的联通性。(deny)ROA设置拒绝了PCA的访问

再测试PCB至PCD的联通性。(permit)由题意ROA中的S0/1为10.68.1.2 PCB的IP为10.66.1.1,不包含于S0/1 VLAN中,由于命令所示为S0/0由于是输出控制,能访问,所以访问列表设置无效,不加控制,所以能PING通, 从PCB到SWB的F0/1 S0/1到SWA 的S0/0 S0/1到SWC的S0/0 F0/1到PCD

再测试PCD至PCA的联通性。(permit)由于是输出控制,所以对输入不做要求,能通,所以输出访问列表无效,对输入不加控制,所以能PING通, 从PCD到SWC的F0/1-S0/0到SWA的S0/0-S0/0到SWB的S0/1-F0/0到PCA

4.重新设置各路由接口有电脑的ip地址。R0B(config)#access-list 4 permit 10.65.1.1 ROB(config)#access-list 4 deny 10.65.1.0 0.0.0.255

(10.65.1.3 deny)ROB(config)#access-list 4 permit 10.65.0.0 0.0.255.255(10.65.0.0 permit)ROB(config)#access-list 4 deny 10.0.0.0 0.255.255.255

(10.66.0.0 deny)ROB(config)#access-list 4 permit any

(11.0.0.0 premit)ROB(config)#int s0/0 ROB(config-if)#ip access-group 4 in

测试PCA至PCD的联通性。(deny)PCA的IP为10.65.1.1按理来说应该所有的访问都允许,由于命令所示为S0/0读入控制,题意ROB S0/0为10.68.1.1,PCA的IP为10.65,1,1不包含于ROB VLAN中所以不通

测试PCB至PCD的联通性。(permit)P CB的IP为10.66.1.1属于deny 10.0.0.0 0.255.255.255,所以访问被拒绝,所以PING不通

测试PCD至PCA的联通性。(permit)PCD的IP为10.74.1.1属于deny 10.0.0.0 0.255.255.255,按理来说应该是拒绝的,但是DENY属于源程序拒绝访问,而PCD先到S0/1,在通过S0/1与S0/0进行信息传递,所以能到达PCA,所以设置读入列表参数无效,对PCD不做限制, 从PCD到SWC的F0/1-S0/0到SWA的S0/0-S0/0到SWB的S0/1-F0/0到PCA

接口的ip地址,计算机的ip地址,请自定

实验十二 扩展访问控制列表

装入文件2 1.阻止PCA访问PCD: ROB(config)# access-list 101 deny icmp 10.65.1.1 0.0.0.0 10.74.1.1 0.0.0.0 ROB(config)# access-list 101 permit ip any any ROB(config)# int s0/0 ROB(config-if)#ip access-group 101 out ROB(config-if)#exit ROB(config)#exit ROB#sh access-list

[root@PCA root]#ping 10.74.1.1(不通)PCA的IP为10.65.1.1属于deny ip 10.65.1.1 0.0.0.0 10.74.1.1 0.0.0.0,所以PING 不通

[root@PCC root]#ping 10.74.1.1(通)PCC和PCD处在同一个路由器下,通过路由器寻址可以相互PING通,从PCC到SWC的F0/0-F0/1到PCD

[root@PCD root]#ping 10.65.1.1(通)因为ROB的S0/0为输出控制,所以当PCD通过外部访问ROB某个端口下的PCA时,是不受控制的,所以ROB的S0/0的输出对PCD的访问是无效的,所以链路不加限制,从 PCD到SWC的F0/1-S0/0到SWA的S0/0-S0/0到SWB的S0/1-F0/0到PCA

2.删除这个列表

ROB(config)#no access-list 101 ROB(config)#int s0/0 ROB(config-if)#no ip access-group 101 ROB#sh access-list

[root@PCA root]#ping 10.74.1.1(通)由于没有任何限制,再加上路由器间的寻址,所以可以PING通, 从PCA到SWB的F0/0-S0/1到SWA的S0/0-S0/1到SWC的S0/0-F0/1到PCD

3.阻止10.65.0.0网络访问 10.74.1.1计算机(PCD)。

ROA(config)#access-list 102 deny ip 10.65.1.1 0.0.0.0 10.74.1.1 0.0.0.0 ROA(config)#access-list 102 permit ip any any ROA(config)#interface s0/1 ROA(config-if)#ip access-group 102(默认为out)

[root@PCA root]#ping 10.74.1.1(不通)PCA的IP属于 DENY IP 10.65.1.1 0.0.0.0 10.74.1.1 0.0.0.0 被限制访问,所以不通

[root@PCC root]#ping 10.74.1.1(通)由于PCC和PCA在同一个路由器下,所以能通过路由器寻址进行PING通, 从PCC到SWC的F0/0-F0/1到PCD

[root@PCD root]#ping 10.65.1.1(通)由于ROA的S0/0为输出控制,所以对输入没有任何要求,所以对输出控制列表设置无效,PCD访问PCA不受限制, 从PCD到SWC的F0/1-S0/0到SWA的S0/0-S0/0到SWB的S0/1-F0/0到PCA

心得体会

从实验三中学会了如何规划ip地址,设置vlan,将连接两个交换机的接口设置成trunk等,知道了写代码时一定得仔细,否则打错了下面就不能ping通了。

从实验六中,我学会了设置计算机和交换机的IP和网关,设置路由器的接口的ip地址等。

从实验七中,我学会了设置交换机,增加一个vlan,设置路由器的子接口,了解了isl协议,isl协议:交换链路内协议(ISL),是思科私有协议,主要用于维护交换机和路由器间的通信流量等 VLAN 信息。ISL 主要用于实现交换机、路由器以及各节点(如服务器所使用的网络接口卡)之间的连接操作。为支持 ISL 功能特征,每台连接设备都必须采用 ISL 配置。ISL 所配置的路由器支持 VLAN 内通信服务。非 ISL 配置的设备,则用于接收由 ISL 封装的以太帧(Ethernet Frames),通常情况下,非 ISL 配置的设备将这些接收的帧及其大小归因于协议差错。

从实验九中,我学会了设置静态路由。

从实验十中,我学会了用动态路由实现网络的连通。从实验十一中,我学会了基本访问控制列表的使用。从实验十二中,我学会了如何扩展访问控制列表。

最后,谢谢老师这几天的指导,真的让我学到了很多很多。

第五篇:计算机网络课程设计

计算机网络课程设计——IP数据报流量统计

摘 要

本课程设计主要是编制程序,监控网络,捕获一段时间内网络上的IP数据包,按IP数据包的源地址统计出该源地址在该时间段内发出的IP包的个数,将其写入日志文件中或用图形表示出来。程序中会用到Winpcap,它主要功能在于独立于主机协议发送和接收原始数据报。本次课程设计中用VC++实现基于Winpcap的网络数据包的捕获和统计,基于Winpcap的应用程序将根据获取网络设备列表;选择网卡并打开;设置过滤器;捕获数据包或者发送数据包;列出网卡列表,让用户选择可用的网卡的步骤进行编写,同时对于TCP/IP协议以及IP数据抱的格式有了进一步的了解和掌握。通过编写程序从而实现对网络中IP数据包流量的统计。

关键词: IP数据包;流量统计;Winpcap;VC++ 1 引 言

随着Internet技术的发展,基于IP协议的应用成为网络技术研究与软件开发的一个重要基础,因此学习网络层以基本概念,了解IP协议的基本内容,对于掌握TCP/IP协议的主要内容和网络课程的学习是十分重要的,通过本次课程设计,有助于熟悉IP数据包格式并加深对IP协议的理解。

1.1 课程设计目的

本次课程设计主要是通过用VC++编程实现对网络中IP数据包流量的统计,实际上是编制程序,监控网络,捕获一段时间内网络上的IP数据包,按IP数据包的源地址统计出该源地址在该时间段内发出的IP包的个数,同时应用Winpcap,Winpcap提供了很好的捕获网络数据包的方法,通过本次课程设计可以将VC++知识与Winpcap结合起来实现在一段时间内对IP数据包的流量进行统计。加深了对Winpcap的理解和运用能力,同时也增长了知识,开阔了视野,对于以后的学习有很大的帮助。

1.2 课程设计的要求

(1)理解运用VC++软件实现对网络中的IP数据抱流量的统计方法和步骤。(2)锻炼独立编程和查阅文献资料解决问题的能力。

(3)通过课程设计培养严谨的科学态度,认真的工作作风。

1.3 设计平台

Microsoft Visual C++ 6.0 2 设计原理

IP是ICP/IP协议体系中的网络层协议,TCP、UDP、ICMP和IGMP等其他协议都是以IP协议为基础的。程序中用到的Winpcap是 Windows packetcapture的缩写,这是UNIX下的lipbcap移植到Windows下的产物,是Win32环境下数据包捕获的开放代码函数库。

Winpcap由内核级的数据包过滤器,底层动态链接库(packet.dll)和一个高层的独立于系统的库(wpcap.dll)组成。

2.1 IP协议

IP是TCP/IP模型中的网络层协议,又称为互联网协议,是支持网间互连的数据报协议,它与TCP协议一起构成了TCP/IP协议族的核心。它提供网间连接的完善功能,包括IP数据报规定互联网范围内的IP地址格式。在因特网中IP协议是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。任何厂家生产的计算机系统,只要遵守IP协议就可以与因特网互连互通。IP地址具有唯一性,根据用户性质的不同,可以分为不同的类别。

IP协议的特点如下:

IP协议是一种不可靠、无连接的数据报传送协议。IP协议是点对点的网络层通信协议。IP协议向通信层隐藏了物理网络的差异。

IP协议以一种数据报的形式传输数据,每个数据报独立传输,可能通过不同路径传输,因此可能不按顺序到达目的地,或者出现重复。

2.2 关于Winpcap库

Winpcap(windows packet capture)是windows平台下一个开源的、公共的基于windows的网络接口API库。主要为win32应用程序提供访问网络底层的能力。Winpcap的主要功能在于独立于主机协议(如TCP/IP)发送和接收原始数据报。也就是说,Winpcap不能阻塞、过滤或控制其他应用程序数据报的收发,它只是监听共享网络上传送的数据报。

其功能有:捕获原始数据包,包括在共享网络上各主机发送接收的以及相互之间交换的数据包;在数据包发往应用程序之前,按照自定义的规则将某些特殊的数据包过滤掉;在网络上发送原始数据包;收集网络通信过程中的统计信息。Winpcap是针对win32平台上的抓包和网络分析的一个架构,它包括一个核心态的包过滤器,一个底层的动态链接库(packet.dll)和一个高层的不依赖于系统的库(wpcap.dll)。它由Packet、NPF(Netgroup Packet Filter)、packet.dll、wpcap.dll、Application组成,首先,抓包系统必须绕过操作系统的协议来访问在网络上传输的原始数据包,这就要求一部分运行在操作系统核心内部,直接与网络接口驱动交互。这个部分是系统依赖的,在Winpcap的解决方案里它被认为是一个设备驱动,称作NPF。其次,抓包系统必须有用户级的程序接口,通过这些接口,用户程序可以利用内核驱动提供的高级特性。Winpcap提供了两个不同的库:packet.dll和wpcap.dll。前者提供了一个底层API,伴随着一个独立于Microsoft操作系统的编程接口,这些API可以直接用来访问驱动的函数;后者导出了一组更强大的与libpcap一致的高层抓包函数库。这些函数使得数据包的捕获以一种与网络硬件和操作系统无关的方式进行。3 程序代码设计步骤

根据流量设计程序的主要功能,相应的算法如下: 取得当前网络设备列表;

将用户选择的网卡以混杂模式打开,以接收到所有的数据包; 设置过滤器;

捕获IP数据包的源地址进行统计(用链表结构进行实现)。

获取网卡列表是为了得到网卡的相关信息,以便于用户进行选择,选取Ethermet网卡是用户所选择的网卡类型,编译设置过滤器是为了编译并设置过滤器是为了只捕获网络数据流的某些数据,打开网卡既将网卡设置为混杂(统计)模式是为了接受所有经过网卡的数据包,包括不是发给本机的数据包,开始主循环以是否超时为判断条件,循环体内主要有捕获IP数据包、将IP包的源地址加入链表、条件判断,循环结束后输出链表内容,程序至此结束。

现将其每一步的具体步骤简述如下:

3.1取得网络适配器列表

//取得网络适配器列表步骤中,alldevs是pcap_if_it指针,指向链表头,errbuf是char类型数组,存储错误信息。

pcap_findalldevs(&alldevs,errbuf);

cout<<”网络适配器列表:”<<’n’;

for(d=alldevs;d;d=d->next)

{

cout<<++i<<“:”

if(d->description)

cout<<“"

else

cout<<”No description available!“<<'n';

}

3.2 指定要监听的网络适配器并打开

cout<<”输入要监听的网络适配器号:”>inum;

for(d=alldevs,i=0;inext,i++);

fp=pcap_open_live(d->name,65536,1,1000,errbuf);3.3 编译并设置过滤器

//编译过滤器,fp指向打开的网络适配器,fcode为编译完成后的过滤器存储地址,“tcp“给出了过滤条件,下一个参数表示是否被优化(0为false,1为true),最后一个参数给出了子网掩码。

pcap_compile(fp,&fcode,”tcp”,1,netmask)

pcap_setfilter(fp,&fcode)3.4 设置网络适配器为统计模式

if(pcap_setmode(fp,MODE_STAT)<0)

{

cout<<”n设置网络适配器模式错误!n”;

pcap_close(fp);

}

3.5 开始主循环,调用回调函数显示网络流量统计信息

//pcap_loop由Winpcap库定义,对每个采集来的数据包都用ProcessPacket函数进行处理,fp指向打开的网络适配器

pcap_loop(fp,0,dispatcher_handler,(PUCHAR)&st_ts);

pcap_close(fp);3.6 回调函数的实现

//对于捕获到的每一个数据包应用此回调函数

void dispatcher_handler(u_char *state,const struct pcap_pkthdr *header,const u_char *pkt_data)

{

struct timeval *old_ts=(struct timeval *)state;

u_int delay;

LARGE_INTEGER Bps,Pps;

struct tm *ltime;

char timestr[16];

time_t local_tv_sec;

//计算距上一个数据包的时间延迟,以ms为单位

//这个值是从与一个数据包相关的时间戳中截获的delay=(header->ts.tv_sec-old_ts->tv_sec)*1000000-old_ts->tv_usec+header->ts.tv_usec;

//获得每秒的比特数

Bps.QuadPart=(((*(LONGLONG*)(pkt_data+8))*8*1000000)/(delay));

//获得每秒的数据包数

Pps.QuadPart=(((*(LONGLONG*)(pkt_data))*1000000)/(delay));

//将时间戳转变位可读的标准格式

ltime=localtime(&header->ts.tv_sec);

strftime(timestr,sizeof timestr,”%H:%M:%S“,ltime);

//Print timestamp

printf(”%s“,timestr);

//Print the samples

printf(”BPS=%I64u“,Bps.QuadPart);

printf(”PPS=%I64un",Pps.QuadPart);

//store current timestamp

old_ts->tv_sec=header->ts.tv_sec;

old_ts->tv_usec=header->ts.tv_usec;

};4 结果及分析

安装好WinPcap软件,在VC++界面上点击工具->选项->目录。添加Include文件夹下的所有文件和Lib下的所有内容,调试完程序无误后,点击开始—>运行“cmd”进入目标文件夹Debug下运行EXE文件。此时程序会检测电脑系统中的网卡,等待程序的运行结果.图 捕获的IP地址和数据包的信息 常见问题及解决方法

在刚开始做此课程设计的时候我只编写了主程序代码,并没有建立工程,后来通过查找资料及文献才知道要建立一个C++应用工程,而且程序中用到的Winpcap库文件C++中并没有,需要自己下载WinPcap_4_1_1.exe和WpdPack_4_1_1.zip,前者是Winpcap的开发程序,后者是inlude文件和lib文件,这些都是需要自己手动添加的,这里include和lib文件夹里的东西VC++6.0里面没有,出现error: Cannot open include file:’pcap.h’:No such file or directory这个问题,就需要添加。具体步骤如下:

第一步: 点菜单栏上的“工具“,再点击下拉菜单中的”选项“对话框把winpcap开发包里面的lib文件添加进去。

第二步: 点击菜单栏里的工程——设置,选择连接在对象/库模块中输入wpcap.lib和packet.lib,再点C/C++ 在“预处理程序定义”下输入WPCAP和HAVE_REMOTE,要用逗号隔开。

至此,Winpcap环境已部署好了不会再出错了。

接下来出错的是程序中的一些函数的参数,比如说int pcap_compile(pcap_t *p, struct bpf_program *fp,char *str,int optimize, bpf_u_int32 netmask),int pcap_setfilter(pcap_t *p, struct bpf_program *fp)函数的参数在程序编译的时候会报错,通过搜集资料及与同学交流初步更正了错误,但是程序并不是很顺利地运行出来。

下载计算机网络课程设计-编程实现简单的TCP协议分析器word格式文档
下载计算机网络课程设计-编程实现简单的TCP协议分析器.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    计算机网络课程设计

    目录 一﹑实验室概述 ............................................................................................................................... 2 二、设计需......

    计算机网络课程设计

    第1章 概述 1.1医院简介 沈阳市第一人民医院创建于1962年,是集医疗、科研、教学、预防保健于一体,以脑科为龙头、多科系协调发展的大型综合医院,是辽宁中医学院和沈阳医学院的......

    计算机网络课程设计

    课 程 设 计 说 明 书 题 目: 计算机网络课程设计 院(系): 专 业: 班 级: 学 号: 姓 名:指导老师:完成时间: 201X年7月4日~201X年7月8日成绩:目录 1 引言 ..............................

    计算机网络课程设计

    实验一交换式以太网路由互联 一、 实验目的 学习掌握交换式以太网主机连接配置和用路由器直接交付路由实现简单的网络互连,了解交换式以太网络内部和多个交换式以太网络之......

    计算机网络课程设计

    五邑大学大学计算机网络原理课程设计 计算机网络原理课程设计 说明书 学号:11080511 姓名:黄秉辉 五邑大学 计算机学院 五邑大学大学计算机网络原理课程设计 一、课程设计......

    计算机网络课程设计(精选)

    课程设计(论文)任务书 信息工程 学院 计算机应用 专业 计算机2010-1 班 一、课程设计(论文)题目 计算机网络课程设计 二、课程设计(论文)工作自 2012 年 6 月 18 日起......

    计算机网络课程设计

    计算机网络课程设计 姓名:学号: 班级:完成时间:2015.12.5 1.课程设计要求: 1.PCA至PCD五台PC机属于不同网络,且要划分VLAN 2.PCA能ping通所有PC机,PCC不能ping通PCE 3.PCA属于内网......

    计算机网络课程设计

    《计算机网络》 课程设计 姓 名 赵世友 专 业网络工程 班 级 学 号 网133 139074357 李沁 指导教师 安徽工业大学计算机学院2016.6.12 计算机网络课程设计- #+DATE:......