第一篇:計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)-編程實(shí)現(xiàn)簡單的TCP協(xié)議分析器
編程實(shí)現(xiàn)簡單的TCP協(xié)議分析器
編程實(shí)現(xiàn)簡單的TCP協(xié)議分析器
一、問題描述
編程實(shí)現(xiàn)簡單的TCP協(xié)議分析器,TCP協(xié)議分析器是一種用于監(jiān)督和跟蹤網(wǎng)絡(luò)活動(dòng)的診斷工具,它從局域網(wǎng)中抓取IP數(shù)據(jù)包,并對(duì)它進(jìn)行分析得到相應(yīng)的頭部信息,過濾TCP包進(jìn)行分析,得到TCP包的相應(yīng)信息。
二、基本要求
1.利用原始套接字實(shí)現(xiàn)簡單的TCP協(xié)議分析器。2.系統(tǒng)功能包括:
2.1 原始套接字與網(wǎng)卡綁定,并接收流經(jīng)網(wǎng)卡的所有數(shù)據(jù)包; 2.2 對(duì)數(shù)據(jù)包進(jìn)行分析以獲得源IP地址和目的IP地址; 2.3 對(duì)TCP Segment進(jìn)行分析以獲得其首部詳細(xì)信息; 2.4 顯示分析結(jié)果。3 建議使用VC++。
三、設(shè)計(jì)思想
TCP協(xié)議的數(shù)據(jù)傳送程序是由二個(gè)子程序組成的。也可以看成是服務(wù)器端程序和客戶端程序,其中:服務(wù)器端程序的功能是偵聽端口號(hào),接收遠(yuǎn) 程主要的TCP連接申請(qǐng),并接收遠(yuǎn)程主機(jī)傳送來的文字?jǐn)?shù)據(jù)。另外一個(gè)子程序,也就是所謂的客戶端程序,主要實(shí)現(xiàn)向網(wǎng)絡(luò)的遠(yuǎn)程主機(jī)提出TCP連接申請(qǐng)。
程序利用原始套接字抓取局域網(wǎng)中的IP包。
TCP協(xié)議分析器實(shí)現(xiàn)了sniffer的一部分功能。而sniffer的工作原理是:1.把網(wǎng)卡置于混雜模式;2.捕獲數(shù)據(jù)包;3.分析數(shù)據(jù)包。
Raw Socket: 原始套接字可以用它來發(fā)送和接收 IP 層以上的原始數(shù)據(jù)包, 如 ICMP,TCP, UDP等。
四、系統(tǒng)結(jié)構(gòu)
(1)Pcap_addr描述網(wǎng)絡(luò)接口地址;
(2)pcap_pkthdr用來描述每個(gè)捕獲到的數(shù)據(jù)包的基本信息;(3)int_pcaplookupnet獲取網(wǎng)絡(luò)地址和網(wǎng)絡(luò)掩碼;
(4)int_pcaploop循環(huán)捕獲網(wǎng)絡(luò)數(shù)據(jù)包,直到遇到錯(cuò)誤或滿足退出條件;(5)pcap_t* pcap_open_dead構(gòu)造一個(gè)libpcap句柄。
五、程序流程(或模塊劃分)
編程實(shí)現(xiàn)簡單的TCP協(xié)議分析器
六、源程序
#include “pcap.h” struct ether_header {
u_int8_t ether_dhost[6];
/* 目的以太網(wǎng)地址 */
u_int8_t ether_shost[6];
/* 源以太網(wǎng)地址 */
u_int16_t ether_type;
/* 以太網(wǎng)類型 */ };struct arp_header
編程實(shí)現(xiàn)簡單的TCP協(xié)議分析器
{
u_int16_t arp_hardware_type;
/* 硬件類型 */
u_int16_t arp_protocol_type;
/* 協(xié)議類型 */
u_int8_t arp_hardware_length;
/* 硬件地址長度 */
u_int8_t arp_protocol_length;
/* 協(xié)議地址長度 */
u_int16_t arp_operation_code;
/* 操作碼 */
u_int8_t arp_source_ethernet_address[6];
/* 源以太網(wǎng)地址 */
u_int8_t arp_source_ip_address[4];
/* 源IP地址 */
u_int8_t arp_destination_ethernet_address[6];
/* 目的以太網(wǎng)地址 */
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;
/* 服務(wù)質(zhì)量 */
u_int16_t ip_length;
/* 長度 */
u_int16_t ip_id;
/* 標(biāo)識(shí) */
u_int16_t ip_off;
編程實(shí)現(xiàn)簡單的TCP協(xié)議分析器
/* 偏移 */
u_int8_t ip_ttl;
/* 生存時(shí)間 */
u_int8_t ip_protocol;
/* 協(xié)議類型 */
u_int16_t ip_checksum;
/* 校驗(yàn)和 */
struct in_addr ip_souce_address;
/* 源IP地址 */
struct in_addr ip_destination_address;
/* 目的IP地址 */ };struct udp_header {
u_int16_t udp_source_port;
/* 源端口號(hào) */
u_int16_t udp_destination_port;
/* 目的端口號(hào) */
u_int16_t udp_length;
/* 長度 */
u_int16_t udp_checksum;
/* 校驗(yàn)和 */ };struct tcp_header {
u_int16_t tcp_source_port;
/* 源端口號(hào) */
u_int16_t tcp_destination_port;
/* 目的端口號(hào) */
u_int32_t tcp_sequence_liuzhen;
/* 序列號(hào) */
u_int32_t tcp_acknowledgement;
/* 確認(rèn)序列號(hào) */
#ifdef WORDS_BIGENDIAN
u_int8_t tcp_offset: 4,/* 偏移 */
編程實(shí)現(xiàn)簡單的TCP協(xié)議分析器
tcp_reserved: 4;
/* 未用 */
#else
u_int8_t tcp_reserved: 4,/* 未用 */
tcp_offset: 4;
/* 偏移 */
#endif
u_int8_t tcp_flags;
/* 標(biāo)記 */
u_int16_t tcp_windows;
/* 窗口大小 */
u_int16_t tcp_checksum;
/* 校驗(yàn)和 */
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;
/* 校驗(yàn)和 */
u_int16_t icmp_id;
/* 標(biāo)識(shí)符 */
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協(xié)議變量 */
u_char flags;
編程實(shí)現(xiàn)簡單的TCP協(xié)議分析器
/* 標(biāo)記 */
int header_length;
/* 長度 */
u_short source_port;
/* 源端口 */
u_short destination_port;
/* 目的端口 */
u_short windows;
/* 窗口大小 */
u_short urgent_pointer;
/* 緊急指針 */
u_int sequence;
/* 序列號(hào) */
u_int acknowledgement;
/* 確認(rèn)號(hào) */
u_int16_t checksum;
/* 校驗(yàn)和 */
tcp_protocol =(struct tcp_header*)(packet_content + 14+20);
/* 獲得TCP協(xié)議內(nèi)容 */
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);
/* 確認(rèn)序列碼 */
windows = ntohs(tcp_protocol->tcp_windows);
/* 窗口大小 */
urgent_pointer = ntohs(tcp_protocol->tcp_urgent_pointer);
/* 緊急指針 */
flags = tcp_protocol->tcp_flags;
/* 標(biāo)識(shí) */
checksum = ntohs(tcp_protocol->tcp_checksum);
編程實(shí)現(xiàn)簡單的TCP協(xié)議分析器
/* 校驗(yàn)和 */
printf(“-------TCP協(xié)議
-------n”);
printf(“源端口號(hào):%dn”, source_port);
printf(“目的端口號(hào):%dn”, destination_port);
switch(destination_port)
{
case 80:
printf(“上層協(xié)議為HTTP協(xié)議n”);
break;
case 21:
printf(“上層協(xié)議為FTP協(xié)議n”);
break;
case 23:
printf(“上層協(xié)議為TELNET協(xié)議n”);
break;
case 25:
printf(“上層協(xié)議為SMTP協(xié)議n”);
break;
case 110:
printf(“上層協(xié)議POP3協(xié)議n”);
break;
default:
break;
}
printf(“序列碼:%un”, sequence);
printf(“確認(rèn)號(hào):%un”, acknowledgement);
printf(“首部長度:%dn”, header_length);
printf(“保留:%dn”, tcp_protocol->tcp_reserved);
printf(“標(biāo)記:”);
if(flags &0x08)
printf(“PSH ”);
if(flags &0x10)
printf(“ACK ”);
if(flags &0x02)
printf(“SYN ”);
if(flags &0x20)
編程實(shí)現(xiàn)簡單的TCP協(xié)議分析器
printf(“URG ”);
if(flags &0x01)
printf(“FIN ”);
if(flags &0x04)
printf(“RST ”);
printf(“n”);
printf(“窗口大小:%dn”, windows);
printf(“校驗(yàn)和:%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協(xié)議變量 */
u_int header_length;
/* 長度 */
u_int offset;
/* 偏移 */
u_char tos;
/* 服務(wù)質(zhì)量 */
u_int16_t checksum;
/* 校驗(yàn)和 */
ip_protocol =(struct ip_header*)(packet_content + 14);
/* 獲得IP協(xié)議內(nèi)容 */
checksum = ntohs(ip_protocol->ip_checksum);
/* 獲得校驗(yàn)和 */
header_length = ip_protocol->ip_header_length *4;
/* 獲得長度 */
tos = ip_protocol->ip_tos;
/* 獲得服務(wù)質(zhì)量 */
offset = ntohs(ip_protocol->ip_off);
/* 獲得偏移 */ if(ip_protocol->ip_protocol==6)
{
printf(“-----------IP協(xié)議
-----------n”);
編程實(shí)現(xiàn)簡單的TCP協(xié)議分析器
printf(“版本號(hào):%dn”, ip_protocol->ip_version);
printf(“首部長度:%dn”, header_length);
printf(“服務(wù)質(zhì)量:%dn”, tos);
printf(“總長度:%dn”, ntohs(ip_protocol->ip_length));
printf(“標(biāo)識(shí):%dn”, ntohs(ip_protocol->ip_id));
printf(“偏移:%dn”,(offset &0x1fff)*8);
printf(“生存時(shí)間:%dn”, ip_protocol->ip_ttl);
printf(“協(xié)議類型:%dn”, ip_protocol->ip_protocol);
printf(“上層協(xié)議為TCP協(xié)議n”);
printf(“校驗(yàn)和:%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;
/* 數(shù)據(jù)包個(gè)數(shù),靜態(tài)變量 */ u_short ethernet_type;
/* 以太網(wǎng)類型 */
struct ether_header *ethernet_protocol;struct ip_header *ip_protocol;
/* IP協(xié)議變量 */
u_int header_length;
/* 長度 */
u_int offset;
/* 偏移 */
u_char tos;
/* 服務(wù)質(zhì)量 */
u_int16_t checksum;
/* 校驗(yàn)和 */
ip_protocol =(struct ip_header*)(packet_content + 14);
/* 獲得IP協(xié)議內(nèi)容 */
checksum = ntohs(ip_protocol->ip_checksum);
*argument, const struct pcap_pkthdr 編程實(shí)現(xiàn)簡單的TCP協(xié)議分析器
/* 獲得校驗(yàn)和 */
header_length = ip_protocol->ip_header_length *4;
/* 獲得長度 */
tos = ip_protocol->ip_tos;
/* 獲得服務(wù)質(zhì)量 */
offset = ntohs(ip_protocol->ip_off);
/* 獲得偏移 */
/* 以太網(wǎng)協(xié)議變量 */ ethernet_protocol =(struct ether_header*)packet_content;ethernet_type = ntohs(ethernet_protocol->ether_type);/* 獲得以太網(wǎng)類型 */ if(ethernet_type==0x0800 && ip_protocol->ip_protocol==6){ u_char *mac_string;
/* 以太網(wǎng)地址 */
printf(“**************************************************n”);
printf(“捕獲第%d個(gè)TCP網(wǎng)絡(luò)數(shù)據(jù)包n”, packet_number);
printf(“捕獲時(shí)間:n”);
printf(“%s”, ctime((const time_t*)&packet_header->ts.tv_sec));
/* 獲得捕獲數(shù)據(jù)包的時(shí)間 */
printf(“數(shù)據(jù)包長度:n”);
printf(“%dn”, packet_header->len);
printf(“--------
以太網(wǎng)協(xié)議
--------n”);
/* 獲得以太網(wǎng)協(xié)議內(nèi)容 */
printf(“類型:n”);
printf(“%04xn”, ethernet_type);
printf(“源以太網(wǎng)地址: 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));
/* 獲得源以太網(wǎng)地址 */
printf(“目的以太網(wǎng)地址: 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));
/* 獲得目的以太網(wǎng)地址 */
ip_protocol_packet_callback(argument, packet_header, packet_content);
+ 1),+ 1), 編程實(shí)現(xiàn)簡單的TCP協(xié)議分析器
packet_number++;
printf(“**************************************************n”);
} } void main(){
pcap_t *pcap_handle;
/* Winpcap句柄 */
char error_content[PCAP_ERRBUF_SIZE];
/* 存儲(chǔ)錯(cuò)誤信息 */
char *net_interface;
/* 網(wǎng)絡(luò)接口 */
struct bpf_program bpf_filter;
/* BPF過濾規(guī)則 */
char bpf_filter_string[] = "";
/* 過濾規(guī)則字符串 */
bpf_u_int32 net_mask;
/* 掩碼 */
bpf_u_int32 net_ip;
/* 網(wǎng)路地址 */
net_interface = pcap_lookupdev(error_content);
/* 獲得可用的網(wǎng)絡(luò)接口 */
pcap_lookupnet(net_interface, &net_ip, &net_mask, error_content);
/* 獲得網(wǎng)絡(luò)地址和掩碼地址 */
pcap_handle = pcap_open_live(net_interface, BUFSIZ, 1, 1, error_content);
/* 打開網(wǎng)路接口 */
pcap_compile(pcap_handle, &bpf_filter, bpf_filter_string, 0, net_ip);
/* 編譯BPF過濾規(guī)則 */
pcap_setfilter(pcap_handle, &bpf_filter);
/* 設(shè)置過濾規(guī)則 */
if(pcap_datalink(pcap_handle)!= DLT_EN10MB)
return;
pcap_loop(pcap_handle,-1, ethernet_protocol_packet_callback, NULL);
/* 注冊(cè)回調(diào)函數(shù),循環(huán)捕獲網(wǎng)絡(luò)數(shù)據(jù)包,利用回調(diào)函數(shù)來處理每個(gè)數(shù)據(jù)包 */
pcap_close(pcap_handle);
/* 關(guān)閉Winpcap操作 */ }
編程實(shí)現(xiàn)簡單的TCP協(xié)議分析器
七、測(cè)試數(shù)據(jù)
本地局域網(wǎng)IP數(shù)據(jù)包
八、測(cè)試情況
程序運(yùn)行結(jié)果圖:
編程實(shí)現(xiàn)簡單的TCP協(xié)議分析器
編程實(shí)現(xiàn)簡單的TCP協(xié)議分析器
結(jié) 論
通過兩周的課程設(shè)計(jì),增強(qiáng)了我的實(shí)際動(dòng)手能力,通過實(shí)際的編程整合串聯(lián)了我所學(xué)到的知識(shí)。另外我還學(xué)到了作為編程人員的一些基本素質(zhì),這為我畢業(yè)后找工作奠定了基礎(chǔ)。
通過做TCP協(xié)議分析器學(xué)習(xí)的很多網(wǎng)絡(luò)編程知識(shí): 1.學(xué)會(huì)了winpcap網(wǎng)絡(luò)數(shù)據(jù)報(bào)捕獲開發(fā)包的使用; 2.綁定網(wǎng)卡函數(shù)bind(); 3.數(shù)據(jù)接受函數(shù)recv(); 4.Windows套接字編程;
5.學(xué)習(xí)了原始套接字編程的基本機(jī)制; 6.學(xué)習(xí)對(duì)數(shù)據(jù)包進(jìn)行協(xié)議分析的基本方法。
通過做TCP協(xié)議分析器學(xué)習(xí)的很多Visual C++ Windows編程知識(shí):
1.學(xué)會(huì)了Windows常用數(shù)據(jù)結(jié)構(gòu)的使用;
2.學(xué)到了一些用Visual C++ Windows編程的技巧。
編程實(shí)現(xiàn)簡單的TCP協(xié)議分析器
參考文獻(xiàn)
[1] 甘玲 邱勁 《面向?qū)ο蠹夹g(shù)與Visual C++ 》 清華大學(xué)出版社 [2] 任哲 《MFC Windows 應(yīng)用程序設(shè)計(jì)》清華大學(xué)出版社 [3] 《計(jì)算機(jī)網(wǎng)絡(luò)》 北京:機(jī)械工業(yè)出版社
[4] 《Visual C++網(wǎng)絡(luò)通信編程實(shí)用案例精選》 人民郵電出版社 [5] 《windows程序設(shè)計(jì)》 北京大學(xué)出版社
第二篇:計(jì)算機(jī)網(wǎng)絡(luò) 課程設(shè)計(jì) 發(fā)送TCP數(shù)據(jù)包
課設(shè)名稱:發(fā)送TCP數(shù)據(jù)包
班級(jí):
學(xué)號(hào):
姓名:
指導(dǎo)老師: 日期: 2012.6.15
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告
目錄
一.設(shè)計(jì)題目與要求........................................................................................................2
1.設(shè)計(jì)題目................................................................................................................2
2.設(shè)計(jì)要求................................................................................................................2
二.需求分析...................................................................................................................2三.詳細(xì)設(shè)計(jì)...................................................................................................................2
1.創(chuàng)建一個(gè)原始套接字,并設(shè)置IP頭選項(xiàng).................................................................3
2.構(gòu)造IP頭和TCP頭...............................................................................................3
3.計(jì)算校驗(yàn)和的子函數(shù)..............................................................................................4
4.流程圖...................................................................................................................6
四.調(diào)試分析...................................................................................................................7
五.運(yùn)行結(jié)果...................................................................................................................7
六.總結(jié)..........................................................................................................................8
七.源程序......................................................................................................................9
發(fā)送TCP數(shù)據(jù)包
一.設(shè)計(jì)題目與要求
1.設(shè)計(jì)題目
發(fā)送TCP數(shù)據(jù)包 2.設(shè)計(jì)要求
本設(shè)計(jì)的功能是填充一個(gè)TCP數(shù)據(jù)包,并發(fā)送給目的主機(jī)。
1)以命令行形式運(yùn)行:TCP source_ip source_port dest_ip dest_port,其中SendTCP是程序名,source_ip為源端IP地址,source_port為源端口號(hào),dest_ip為目的地址,dest_port為目的端口號(hào)。
2)其他的TCP頭部參數(shù)請(qǐng)自行設(shè)定。3)數(shù)據(jù)字段為“hello”。
4)成功發(fā)送后在屏幕上輸出“send OK”。
二.需求分析
1.本程序需完成發(fā)送一個(gè)TCP數(shù)據(jù)包給目的主機(jī)
2.程序的輸入:TCP source_ip source_port dest_ip dest_port,然后根據(jù)提示輸入要發(fā)送的數(shù)據(jù),回車即可。
3.程序的輸出:Send OK!
4.測(cè)試數(shù)據(jù) TCP 192.168.1.100 200 192.168.1.101 200
三.詳細(xì)設(shè)計(jì)
本課程設(shè)計(jì)的目標(biāo)是發(fā)送一個(gè)TCP數(shù)據(jù)包,可以利用原始套接字來完成這個(gè)工作。整個(gè)程序由初始化原始套接字和發(fā)送TCP數(shù)據(jù)包兩個(gè)部分組成。
2發(fā)送TCP數(shù)據(jù)包
1.創(chuàng)建一個(gè)原始套接字,并設(shè)置IP頭選項(xiàng)
SOCKET sock;sock = socket(AF_INET,SOCK_RAW,IPPROTO_IP);或者:
sock=WSASoccket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED);這里,設(shè)置了SOCK_RAW標(biāo)志,表示我們聲明的是一個(gè)原始套接字類型。為使用發(fā)送接收超時(shí)設(shè)置,必須將標(biāo)志位置位置為WSA_FLAG_OVERLAPPED。在本課程設(shè)計(jì)中,發(fā)送TCP包時(shí)隱藏了自己的IP地址,因此我們要自己填充IP頭,設(shè)置IP頭操作選項(xiàng)。其中flag設(shè)置為ture,并設(shè)定 IP_HDRINCL 選項(xiàng),表明自己來構(gòu)造IP頭。
setsockopt(sock, IPPROTO_IP, IP_HDRINCL,(char *)&Flag, sizeof(Flag));int timeout=1000; setsockopt(sock, sizeof(timeout));在這里我們使用基本套接字SOL_SOCKET,設(shè)置SO_SNDTIMEO表示使用發(fā)送超時(shí)設(shè)置,超時(shí)時(shí)間設(shè)置為1000ms。2.構(gòu)造IP頭和TCP頭
這里,IP頭和TCP頭以及TCP偽部的構(gòu)造請(qǐng)參考下面它們的數(shù)據(jù)結(jié)構(gòu)。
typedef struct _iphdr //定義IP首部 { UCHAR h_lenver;//4位首部長度+4位IP版本號(hào) UCHAR tos;//8位服務(wù)類型TOS
USHORT total_len;//16位總長度(字節(jié))USHORT ident;//16位標(biāo)識(shí)
USHORT frag_and_flags;//3位標(biāo)志位 UCHAR ttl;//8位生存時(shí)間 TTL
UCHAR proto;//8位協(xié)議(TCP, UDP 或其他)
SOL_SOCKET,SO_SNDTIMEO,(char*)&timeout,3發(fā)送TCP數(shù)據(jù)包
USHORT checksum;//16位IP首部校驗(yàn)和 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;//協(xié)議類型 //TCP長度
}PSD_HEADER;typedef struct _tcphdr //定義TCP首部 { USHORT th_sport;//16位源端口 USHORT th_dport;//16位目的端口 ULONG th_seq;//32位序列號(hào) ULONG th_ack;//32位確認(rèn)號(hào)
UCHAR th_lenres;//4位首部長度/6位保留字 UCHAR th_flag;//6位標(biāo)志位 USHORT th_win;//16位窗口大小 USHORT th_sum;//16位校驗(yàn)和 USHORT th_urp;//16位緊急數(shù)據(jù)偏移量
}TCP_HEADER;
3.計(jì)算校驗(yàn)和的子函數(shù)
在填充數(shù)據(jù)包的過程中,需要調(diào)用計(jì)算校驗(yàn)和的函數(shù)checksum兩次,分別用于校驗(yàn)IP頭和TCP頭部(加上偽頭部),其實(shí)現(xiàn)代碼如下:
USHORT checksum(USHORT *buffer, int size)
4發(fā)送TCP數(shù)據(jù)包
{ 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發(fā)送TCP數(shù)據(jù)包
4.流程圖
開始構(gòu)造原始套接字并初始化填充IP首部計(jì)算IP首部校驗(yàn)和構(gòu)造TCP偽首部填充TCP首部計(jì)算TCP首部校驗(yàn)和填充發(fā)送緩沖區(qū)填入目的地址發(fā)送數(shù)據(jù)包結(jié)束
6發(fā)送TCP數(shù)據(jù)包
四.調(diào)試分析
本程序流程簡單,調(diào)試過程中沒有出現(xiàn)大的問題。
調(diào)試過程中沒有出現(xiàn)重大的語法錯(cuò)誤,主要是運(yùn)行的結(jié)果不理想,和預(yù)期的結(jié)果有差距。填充數(shù)據(jù)包的程序部分是不容易出錯(cuò)的。至于數(shù)據(jù)包的發(fā)送,由于是利用函數(shù)sendto()來實(shí)現(xiàn)的,而sendto()是面向UDP的,將協(xié)議類型修改為UDP(Header.proto=IPPROTO_UDP;)后,調(diào)試運(yùn)行成功,問題得到解決。
調(diào)試時(shí),要添加 #include
五.運(yùn)行結(jié)果
1.輸入:TCP 192.168.1.100 200 192.168.1.101 200
7發(fā)送TCP數(shù)據(jù)包
2.輸入要發(fā)送的字符串:“hello”按Ctrl+Z發(fā)送
六.總結(jié)
通過本次課程設(shè)計(jì),我對(duì)發(fā)送TCP數(shù)據(jù)包的原理有了一定的了解。理解了TCP數(shù)據(jù)報(bào)的報(bào)文格式、TCP連接時(shí)的三次握手和TCP連接結(jié)束時(shí)的四次握手的過程及它們的作用。此外,在設(shè)計(jì)過程中,通過查閱資料,也讓我對(duì)TCP的三大特點(diǎn)(流量控制、差錯(cuò)控制、擁塞控制)有了認(rèn)識(shí)。,在課程設(shè)計(jì)過程中,由于編程知識(shí)的欠缺,使我在課程設(shè)計(jì)過程中不是很順利,編程知識(shí)的欠缺是我的最大障礙,不過,這也給了我動(dòng)力,我會(huì)努力去學(xué)好編程的相關(guān)知識(shí),為以后的學(xué)習(xí)和工作打下基礎(chǔ)。最后,感謝老師安排了此次課程設(shè)計(jì)。
發(fā)送TCP數(shù)據(jù)包
七.源程序
#include
#define IPVER 4 //IP協(xié)議預(yù)定 #define MAX_BUFF_LEN 65500 //發(fā)送緩沖區(qū)最大值
typedef struct ip_hdr //定義IP首部 {
UCHAR h_verlen;//4位首部長度,4位IP版本號(hào) UCHAR tos;//8位服務(wù)類型TOS USHORT total_len;//16位總長度(字節(jié))USHORT ident;//16位標(biāo)識(shí) USHORT frag_and_flags;//3位標(biāo)志位 UCHAR ttl;//8位生存時(shí)間 TTL UCHAR proto;//8位協(xié)議(TCP, UDP 或其他)USHORT checksum;//16位IP首部校驗(yàn)和 ULONG sourceIP;//32位源IP地址 ULONG destIP;//32位目的IP地址
發(fā)送TCP數(shù)據(jù)包
}IP_HEADER;
typedef struct tsd_hdr //定義TCP偽首部 {
ULONG saddr;//源地址 ULONG daddr;//目的地址 UCHAR mbz;//沒用 UCHAR ptcl;//協(xié)議類型 USHORT tcpl;//TCP長度
}PSD_HEADER;
typedef struct tcp_hdr //定義TCP首部 {
USHORT th_sport;//16位源端口 USHORT th_dport;//16位目的端口 ULONG th_seq;//32位序列號(hào) ULONG th_ack;//32位確認(rèn)號(hào)
UCHAR th_lenres;//4位首部長度/6位保留字 UCHAR th_flag;//6位標(biāo)志位 USHORT th_win;//16位窗口大小 USHORT th_sum;//16位校驗(yàn)和
USHORT th_urp;//16位緊急數(shù)據(jù)偏移量
}TCP_HEADER;
//CheckSum:計(jì)算校驗(yàn)和的子函數(shù)
USHORT checksum(USHORT *buffer, int size){ unsigned long cksum=0;while(size >1)
發(fā)送TCP數(shù)據(jù)包
{ 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--;
發(fā)送TCP數(shù)據(jù)包
} } 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];//發(fā)送緩沖區(qū)
unsigned short check_Buff[MAX_BUFF_LEN];//檢驗(yàn)和緩沖區(qū) 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;
發(fā)送TCP數(shù)據(jù)包
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;}
發(fā)送TCP數(shù)據(jù)包
//填充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位標(biāo)識(shí) ipHeader.frag_and_flags=0;//3位標(biāo)志位 ipHeader.ttl=128;//8位生存時(shí)間 ipHeader.proto=IPPROTO_TCP;//協(xié)議類型 ipHeader.checksum=0;//檢驗(yàn)和暫時(shí)為0 ipHeader.sourceIP=inet_addr(argv[1]);//32位源IP地址 ipHeader.destIP=inet_addr(argv[3]);//32位目的IP地址
//計(jì)算IP頭部檢驗(yàn)和
memset(check_Buff,0,MAX_BUFF_LEN);memcpy(check_Buff,&ipHeader,sizeof(IP_HEADER));ipHeader.checksum=checksum(check_Buff,sizeof(IP_HEADER));
//構(gòu)造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位目的端口號(hào) tcpHeader.th_sport=htons(atoi(argv[2]));//16位源端口號(hào)
發(fā)送TCP數(shù)據(jù)包
tcpHeader.th_seq=0;//SYN序列號(hào) tcpHeader.th_ack=0;//ACK序列號(hào)置為0 //TCP長度和保留位
tcpHeader.th_lenres=(sizeof(tcpHeader)/sizeof(unsigned long)<<4|0);tcpHeader.th_flag=2;//修改這里來實(shí)現(xiàn)不同的標(biāo)志位探測(cè),2是SYN,1是//FIN,16是ACK探測(cè) 等等
tcpHeader.th_win=htons((unsigned short)16384);//窗口大小 tcpHeader.th_urp=0;//偏移大小 tcpHeader.th_sum=0;//檢驗(yàn)和暫時(shí)填為0
//計(jì)算TCP校驗(yàn)和
memset(check_Buff,0,MAX_BUFF_LEN);memcpy(check_Buff,&psdHeader,sizeof(psdHeader));
memcpy(check_Buff+sizeof(psdHeader),&tcpHeader,sizeof(tcpHeader));
//填充發(fā)送緩沖區(qū)
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);
發(fā)送TCP數(shù)據(jù)包
int datasize=sizeof(IP_HEADER)+sizeof(TCP_HEADER)+read_data_len;//發(fā)送數(shù)據(jù)報(bào)的目的地址 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”);
第三篇:計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)
目
錄
1.課題描述........................................................1 2 系統(tǒng)設(shè)計(jì)概述...................................................1 3 課程設(shè)計(jì)的主要內(nèi)容............................................2 3.1站點(diǎn)總體設(shè)計(jì)原則及設(shè)計(jì)目標(biāo)....................................2 3.2用戶需求......................................................2 3.3動(dòng)態(tài)IP地址的設(shè)置及服務(wù)器的配置...............................3 3.3.1.動(dòng)態(tài)IP配置簡介...........................................3 3.3.2.配置DHCP服務(wù)器...........................................3 3.3.3配置IIS服務(wù)器.............................................6 3.4制作網(wǎng)站......................................................6 3.4.1.建站流程..................................................6 3.4.2.網(wǎng)站各模塊的設(shè)計(jì)...........................................7 3.4.3.建站實(shí)現(xiàn)軟件...............................................8 3.5.建站注意要點(diǎn)..................................................9 3.5.1.前期調(diào)研分析...............................................9 3.5.2.網(wǎng)站的目的及功能定位.......................................9 3.5.3網(wǎng)站技術(shù)解決方案...........................................9 3.5.4.網(wǎng)站內(nèi)容規(guī)劃.............................................10 3.5.5.網(wǎng)頁設(shè)計(jì).................................................10 3.5.6.網(wǎng)站測(cè)試..................................................10 4.網(wǎng)站維護(hù).......................................................10 4.1、靜態(tài)頁面的添加修改..........................................10 4.2、動(dòng)態(tài)功能支持在線更新........................................10
總結(jié)..............................................................12 參考文獻(xiàn).........................................................12
1.課題描述
計(jì)算機(jī)網(wǎng)絡(luò)近年來獲得了飛速的發(fā)展。計(jì)算機(jī)通信網(wǎng)絡(luò)以及Internet已成為我們社會(huì)結(jié)構(gòu)的一個(gè)基本組成部分。網(wǎng)絡(luò)被應(yīng)用于工商業(yè)的各個(gè)方面,電子銀行、電子商務(wù)、企業(yè)管理、信息服務(wù)業(yè)等都以計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)為基礎(chǔ)。從學(xué)校遠(yuǎn)程教育到公司日常辦公乃至現(xiàn)在的電子社區(qū),很多方面都離不開網(wǎng)絡(luò)技術(shù)??梢圆豢鋸埖卣f,網(wǎng)絡(luò)在當(dāng)今世界無處不在。
網(wǎng)絡(luò)的發(fā)展也是一個(gè)經(jīng)濟(jì)上的沖擊。數(shù)據(jù)網(wǎng)絡(luò)使個(gè)人化的遠(yuǎn)程通信成為可能,并改變了商業(yè)通信的模式。一個(gè)完整的用于發(fā)展網(wǎng)絡(luò)技術(shù)、網(wǎng)絡(luò)產(chǎn)品和網(wǎng)絡(luò)服務(wù)的新興工業(yè)已經(jīng)形成,計(jì)算機(jī)網(wǎng)絡(luò)的普及性和重要性已經(jīng)導(dǎo)致了在不同崗位上對(duì)具有更多網(wǎng)絡(luò)知識(shí)的人才的大量需求。企業(yè)需要雇員來規(guī)劃、獲取、安裝、操作、管理那些構(gòu)成計(jì)算機(jī)網(wǎng)絡(luò)的軟硬件系統(tǒng),建立自己的網(wǎng)站,方便辦公及交流 系統(tǒng)設(shè)計(jì)概述
傳統(tǒng)的企業(yè)內(nèi)部辦公存在著種種弊端,往往造成人員和資源的極大浪費(fèi),應(yīng)用網(wǎng)絡(luò)技術(shù)組建余個(gè)高效、快捷、安全的辦公環(huán)境成為許多企業(yè)和單位的當(dāng)務(wù)之急。與傳統(tǒng)的單機(jī)工作相比,網(wǎng)絡(luò)化辦公具有以下幾個(gè)明顯優(yōu)點(diǎn): 1共享軟硬件資源,節(jié)約資金投入,提高運(yùn)作效率
企業(yè)內(nèi)部組件web站點(diǎn)后,可以在一個(gè)部門只安裝一臺(tái)打印機(jī)和掃描儀,其他計(jì)算機(jī)通過局域網(wǎng)共享這些設(shè)備和數(shù)據(jù),有利于降低成本。2對(duì)重要數(shù)據(jù)進(jìn)行安全、集中的管理
組建站點(diǎn)后,可以把一些重要數(shù)據(jù)放置在專門的網(wǎng)絡(luò)服務(wù)器上集中管理,并通過網(wǎng)絡(luò)服務(wù)器的訪問控制限制其他計(jì)算機(jī)對(duì)總要數(shù)據(jù)的訪問。這樣就可以有效管理企業(yè)內(nèi)部的重要數(shù)據(jù),保證數(shù)據(jù)安全性,防止數(shù)據(jù)丟失和被竊取。3方便企業(yè)內(nèi)部信息發(fā)布與交流
當(dāng)企業(yè)進(jìn)行諸如企業(yè)內(nèi)部新聞、電話號(hào)碼、產(chǎn)品文檔、技術(shù)文件等信息發(fā)布時(shí),可以把這些信息放置在web站點(diǎn)的共享目錄上,供員工下載,方便了信息的發(fā)布和接收。4便于員工的協(xié)調(diào)操作
利用內(nèi)部的辦公網(wǎng),可以方便的對(duì)同一事務(wù)進(jìn)行協(xié)同處理,提高工作效率,縮短任務(wù)完成的時(shí)間
圖2.1企業(yè)內(nèi)部網(wǎng)絡(luò)拓?fù)?課程設(shè)計(jì)的主要內(nèi)容
3.1站點(diǎn)總體設(shè)計(jì)原則及設(shè)計(jì)目標(biāo)
組建企業(yè)內(nèi)部web站點(diǎn)要注意站點(diǎn)的分塊、共享、安全性、可管理性、以及可維護(hù)性。在設(shè)計(jì)中,系統(tǒng)結(jié)構(gòu)模塊化,軟硬件平臺(tái)可以模塊化瓶裝,系統(tǒng)配置靈活,使系統(tǒng)具有強(qiáng)大的可增長性和強(qiáng)壯性。滿足多層次安全控制手段,建立完善的安全管理體系,防止數(shù)據(jù)的丟失和被竊取。
組建企業(yè)內(nèi)部web站點(diǎn),既能將公司內(nèi)部所有計(jì)算機(jī)納入系統(tǒng)中去,實(shí)現(xiàn)統(tǒng)一規(guī)劃、分塊工作、異地互聯(lián)、整體管理,并可為將來的應(yīng)用擴(kuò)展升級(jí)預(yù)留接口。
3.2用戶需求 作為企業(yè)內(nèi)部網(wǎng)絡(luò)需要滿足:
1、辦公事務(wù)管理
主要包括公文與文檔管理、公告、大事記、會(huì)議紀(jì)要、資產(chǎn)與辦公用品管理、行政制度、辦公事務(wù)討論等。
2、人力資源管理
主要包括員工檔案、崗位職責(zé)、員工通信錄、認(rèn)識(shí)管理規(guī)范等。
3、財(cái)務(wù)資產(chǎn)管理
主要包括固定資產(chǎn)管理、工資管理、經(jīng)費(fèi)管理等。
4、網(wǎng)站管理
主要包括用戶及權(quán)限設(shè)置、數(shù)據(jù)庫維護(hù)、網(wǎng)頁設(shè)置、標(biāo)志與標(biāo)題設(shè)置及網(wǎng)絡(luò)各欄目內(nèi)容編輯等功能。
3.3動(dòng)態(tài)IP地址的設(shè)置及服務(wù)器的配置
3.3.1.動(dòng)態(tài)IP配置簡介
動(dòng)態(tài)IP地址,顧名思義就是設(shè)備所取得的IP地址是非固定的,是可以動(dòng)態(tài)分配和取得的。使用動(dòng)態(tài)IP地址的原因主要有兩個(gè):一是可以用較少的IP地址構(gòu)建較大的網(wǎng)絡(luò)。如果與連入網(wǎng)絡(luò)的主機(jī)和其它設(shè)備相比,所分得的公用IP地址略少一些,如果為每個(gè)設(shè)備都分配一個(gè)固定的IP地址,則顯然部分計(jì)算機(jī)將不能接入網(wǎng)絡(luò)??紤]到并非所有的計(jì)算機(jī)都在同一時(shí)間內(nèi)運(yùn)行并與網(wǎng)絡(luò)連接,所以,如果將IP進(jìn)行動(dòng)態(tài)分配,即計(jì)算機(jī)連入網(wǎng)絡(luò)時(shí)自動(dòng)取得,斷開與網(wǎng)絡(luò)的連接時(shí)自動(dòng)收回,即可滿足網(wǎng)絡(luò)對(duì)IP地址的需求。二是可以增加網(wǎng)絡(luò)內(nèi)計(jì)算機(jī)的可移動(dòng)性。當(dāng)某臺(tái)主機(jī)從一個(gè)子網(wǎng)移動(dòng)到另一個(gè)子網(wǎng)時(shí),由于IP地址中網(wǎng)絡(luò)號(hào)的不同,從而導(dǎo)致該計(jì)算機(jī)與其它主機(jī)間無法進(jìn)行通信,解決該類問題最簡單的方式就是為移動(dòng)的主機(jī)在新子網(wǎng)中重新分配IP地址。但是,如果采用動(dòng)態(tài)IP地址,就會(huì)減少這種網(wǎng)絡(luò)管理的復(fù)雜性。Windows NT使用DHCP來解決動(dòng)態(tài)IP地址的分配問題。使用DHCP時(shí),整個(gè)網(wǎng)絡(luò)中必須至少有一臺(tái)運(yùn)行Windows NT主機(jī)安裝有DHCP軟件,充當(dāng)DHCP服務(wù)器,而其它所有欲使用DHCP功能的工作站也必須具有支持DHCP的功能。這樣,當(dāng)DHCP工作站啟動(dòng)時(shí),它就會(huì)自動(dòng)與DHCP服務(wù)器通信,并由DHCP服務(wù)器為其提供一個(gè)IP地址。當(dāng)然,這個(gè)地址只是臨時(shí)的 3.3.2.配置DHCP服務(wù)器
DHCP提供了計(jì)算機(jī)IP地址的動(dòng)態(tài)配置,如果需要服務(wù)器為域中的計(jì)算機(jī)動(dòng)態(tài)分配IP地址,則必須配置DHCP服務(wù)器。配置DHCP服務(wù)器的具體步驟如下:
圖3.1打開服務(wù)器配置向?qū)?/p>
圖3.2配置服務(wù)器向?qū)?/p>
圖3.3配置服務(wù)器向?qū)?/p>
圖3.4為配置服務(wù)器向?qū)?/p>
圖3.5管理服務(wù)器
圖3.6 再來就是通過“開始”選擇“控制面板”|“添加或刪除程序”也可以安裝DHCP。
3.3.3配置IIS服務(wù)器
右鍵單擊“我的電腦”選擇“管理”~服務(wù)及應(yīng)用程序~Internet信息服務(wù)~網(wǎng)站~默認(rèn)網(wǎng)站,單擊右鍵,選擇屬性,打開主目錄,設(shè)置主目錄為web站點(diǎn)的根目錄,也可選擇修改其他屬性
圖3.7配置IIS服務(wù)器
3.4制作網(wǎng)站
3.4.1.建站流程
建立網(wǎng)站的流程大致可以分成三個(gè)階段,如圖所示
圖3.8網(wǎng)站的流程框圖
構(gòu)建內(nèi)容信息、搜索整理資料和規(guī)劃網(wǎng)站結(jié)構(gòu)是建立網(wǎng)站的
企業(yè)的每一個(gè)員工都存在向企業(yè)內(nèi)部網(wǎng)發(fā)布內(nèi)容的潛在可能性。但員工必須按照他們各自的角色協(xié)調(diào)作業(yè)活動(dòng)。不同規(guī)模的公司都需要以省時(shí)省錢的方式組織交互信息發(fā)布的流程。
通常情況下,為在網(wǎng)站上發(fā)布內(nèi)容,作者創(chuàng)建的材料要經(jīng)過一個(gè)或多個(gè)編輯的審校和核準(zhǔn)。在這個(gè)過程中,作者及編輯按照各種特定的標(biāo)準(zhǔn)分類及標(biāo)注信息,并為發(fā)布設(shè)計(jì)頁面及連接。這一流程通常不是正式的,且要接受網(wǎng)絡(luò)管理員的協(xié)調(diào),這就導(dǎo)致了管理員在“站點(diǎn)發(fā)布狂潮”到來時(shí),或是當(dāng)用戶對(duì)實(shí)時(shí)信息需求迅速增長時(shí)陷入孤立無援的境地。
使用Site Server可以解決,Site Server還定義了一套為站點(diǎn)增添內(nèi)容的四步流程,既提交、標(biāo)注、核準(zhǔn)和部署。
圖3.9新聞發(fā)布系統(tǒng)框圖
3.4.3.建站實(shí)現(xiàn)軟件
可以用Dreamweaver,主要包括兩種頁面,即html和asp。
HTML(Hyper Text Markup Language ,超文本標(biāo)記語言),或稱為“多媒體文件語言”,是用于創(chuàng)建Web頁和Web 信息發(fā)布的
(1)通用性:可實(shí)現(xiàn)不同平臺(tái)的文檔共享。
(2)可擴(kuò)展性:HTML的標(biāo)簽集合可以根據(jù)新需求而不斷修正或加入有限的新標(biāo)簽符, 為實(shí)現(xiàn)有限的新功能的擴(kuò)展提供保障。
(3)創(chuàng)建的靈活性:HTML文檔是純文本文檔, 可以由網(wǎng)頁編輯器以及其他文本編輯軟件創(chuàng)建。
HTML是“Hyper Text Markup Language”的縮寫,它是一種超文本標(biāo)記語言,是網(wǎng)頁的描述語言,用于編制通過萬維網(wǎng)顯示的超文本文件。它是目前在網(wǎng)頁設(shè)計(jì)中,所使用的最基本的標(biāo)記語言?,F(xiàn)在很多HTML 的編輯器,都是通過跟文字處理器相似的接口來編輯網(wǎng)頁的。
ASP 文件和 HTML 文件類似ASP 文件可包含文本、HTML、XML 和腳本 ASP 文件中的腳本可在服務(wù)器上執(zhí)行。ASP 文件的擴(kuò)展名是 “.asp”.當(dāng)瀏覽器請(qǐng)求某個(gè) HTML 文件時(shí),服務(wù)器會(huì)返回這個(gè)文件.而當(dāng)瀏覽器請(qǐng)求某個(gè) ASP 文件時(shí),IIS 將這個(gè)請(qǐng)求傳遞至 ASP 引擎。ASP 引擎會(huì)逐行地讀取這個(gè)文件,并執(zhí)行文件中的腳本。最后,ASP 文件將以純 HTML 的形式返回到瀏覽器。ASP 指 Active Server Pages(動(dòng)態(tài)服務(wù)器頁面)ASP 是運(yùn)行于 IIS 之中的程序.3.5.建站注意要點(diǎn)
另外在網(wǎng)頁制作過程中應(yīng)注意以下要點(diǎn): 3.5.1.前期調(diào)研分析
了解網(wǎng)頁制作后具體的工作人員具體權(quán)限,以保證公司機(jī)密信息不會(huì)被泄露,同時(shí)又能讓每個(gè)人從網(wǎng)站上獲取足夠的工作信息;同時(shí)對(duì)于私人隱私的公開應(yīng)得到個(gè)人的允許。在注意到以上的同時(shí),還要考慮公司的自身情況、建設(shè)網(wǎng)站的能力等 3.5.2.網(wǎng)站的目的及功能定位
本次為企業(yè)內(nèi)部web站點(diǎn)的構(gòu)建及維護(hù) 3.5.3網(wǎng)站技術(shù)解決方案
確定服務(wù)器,是自建服務(wù)器還是租用虛擬主機(jī)。選擇操作系統(tǒng)。網(wǎng)站安全性措施,如:防入侵,防病毒,防竊取方案
3.5.4.網(wǎng)站內(nèi)容規(guī)劃
根據(jù)網(wǎng)站的目的和功能規(guī)劃網(wǎng)站內(nèi)容。一般企業(yè)內(nèi)部網(wǎng)站應(yīng)包括:公司簡介、部門簡介、公共信息、新聞發(fā)布、員工聯(lián)系方式、任務(wù)信息、信息搜索查詢、相關(guān)幫助等內(nèi)容。
3.5.5.網(wǎng)頁設(shè)計(jì)
網(wǎng)頁美術(shù)設(shè)計(jì)要求。網(wǎng)頁美術(shù)設(shè)計(jì)一般要求與企業(yè)整體形象一致,企業(yè)內(nèi)部網(wǎng)色彩要與辦公環(huán)境保持和諧 3.5.6.網(wǎng)站測(cè)試
①網(wǎng)站發(fā)布前要進(jìn)行細(xì)致周密的測(cè)試,以保證正常的瀏覽和使用。主要測(cè)試內(nèi)容有: ②服務(wù)器穩(wěn)定性、安全性。③程序及數(shù)據(jù)庫測(cè)試
④網(wǎng)頁兼容性測(cè)試,包括不同瀏覽器下的現(xiàn)實(shí)結(jié)果、不同顯示器分辨率的頁面效果等。⑤需要的其他測(cè)試
4.網(wǎng)站維護(hù)
服務(wù)器及相關(guān)軟硬件的維護(hù),對(duì)可能出現(xiàn)的問題進(jìn)行評(píng)估,制定相應(yīng)時(shí)間。數(shù)據(jù)庫維護(hù)。有效地利用數(shù)據(jù)是網(wǎng)站維護(hù)的重要內(nèi)容,因此數(shù)據(jù)庫的維護(hù)要受到重視。
內(nèi)容的更新、調(diào)整計(jì)劃。
制定相關(guān)網(wǎng)站維護(hù)的規(guī)定,將網(wǎng)站維護(hù)制度化、規(guī)范化。
4.1、靜態(tài)頁面的添加修改
靜態(tài)頁面的更新需要使用專業(yè)的網(wǎng)頁設(shè)計(jì)工具,然后將修改后的網(wǎng)頁通過FTP上傳到相應(yīng)的位置,在此同時(shí)還要保證不能破壞其他的頁面程序和格局
4.2、動(dòng)態(tài)功能支持在線更新
如果企業(yè)信息量很大,如工作信息經(jīng)常需要更新,有更多的企業(yè)資訊需要告訴員工,企業(yè)建立動(dòng)態(tài)數(shù)據(jù)庫系統(tǒng)。這里的動(dòng)態(tài)并不是指動(dòng)畫,而是指網(wǎng)站的內(nèi)容來自企業(yè)的數(shù)據(jù)庫。如果更改了數(shù)據(jù)庫,那么前臺(tái)頁面的內(nèi)容也會(huì)隨之而更改。
總 結(jié)
通過這次課程設(shè)計(jì),我拓寬了知識(shí)面,鍛煉了能力,綜合素質(zhì)得到較大提高。安排課程設(shè)計(jì)的基本目的,在于通過理論與實(shí)際的結(jié)合、人與人的溝通,進(jìn)一步提高思想覺悟。尤其是觀察、分析和解決問題的實(shí)際工作能力,以便培養(yǎng)成為能夠主動(dòng)適應(yīng)社會(huì)主義現(xiàn)代化建設(shè)需要的高素質(zhì)的復(fù)合型人才。作為整個(gè)學(xué)習(xí)體系的有機(jī)組成部分,課程設(shè)計(jì)雖然安排在一周進(jìn)行,但并不具有絕對(duì)獨(dú)立的意義。它的一個(gè)重要功能,在于運(yùn)用學(xué)習(xí)成果,檢驗(yàn)學(xué)習(xí)成果。運(yùn)用學(xué)習(xí)成果,把課堂上學(xué)到的系統(tǒng)化的理論知識(shí),嘗試性地應(yīng)用于實(shí)際設(shè)計(jì)工作,并從理論的高度對(duì)設(shè)計(jì)工作的現(xiàn)代化提出一些有針對(duì)性的建議和設(shè)想。檢驗(yàn)學(xué)習(xí)成果,看一看課堂學(xué)習(xí)與實(shí)際工作到底有多大距離,并通過綜合分析,找出學(xué)習(xí)中存在的不足,以便為完善學(xué)習(xí)計(jì)劃,改變學(xué)習(xí)內(nèi)容與方法提供實(shí)踐依據(jù)。對(duì)計(jì)算機(jī)專業(yè)的本科生來說,實(shí)際能力的培養(yǎng)至關(guān)重要,必須從課堂走向?qū)嵺`。這也是一次預(yù)演和準(zhǔn)備畢業(yè)設(shè)計(jì)工作。通過課程設(shè)計(jì),讓我找出自身狀況與實(shí)際需要的差距,并在以后的學(xué)習(xí)期間及時(shí)補(bǔ)充相關(guān)知識(shí),為求職與正式工作做好充分的知識(shí)、能力準(zhǔn)備,從而縮短從校園走向社會(huì)的心理轉(zhuǎn)型期。課程設(shè)計(jì)促進(jìn)了我系人才培養(yǎng)計(jì)劃的完善和課程設(shè)置的調(diào)整。在一個(gè)星期的課程設(shè)計(jì)之后,我感到不僅實(shí)際動(dòng)手能力有所提高,更重要的是通過對(duì)網(wǎng)站開發(fā)流程以及維護(hù)方面的了解,進(jìn)一步激發(fā)了我對(duì)專業(yè)知識(shí)的興趣,并能夠結(jié)合實(shí)際存在的問題在專業(yè)領(lǐng)域內(nèi)進(jìn)行更深入的學(xué)習(xí)。
在課程設(shè)計(jì)過程中,我學(xué)到了很多人生的哲理,懂得怎么樣去制定計(jì)劃,怎么樣去實(shí)現(xiàn)這個(gè)計(jì)劃,并掌握了在執(zhí)行過程中怎么樣去克服心理上的不良情緒,黑夜過去了,我收獲的是黎明。
參考文獻(xiàn)
[1]朱兵.小型網(wǎng)組建與應(yīng)用進(jìn)階[M].南方出版社.2004.[2]鄧文達(dá)胡伏湘.計(jì)算機(jī)網(wǎng)絡(luò)教程[M].清華大學(xué)出版社.2007.[3] 趙永超.新編網(wǎng)站規(guī)劃與設(shè)計(jì)教程[M].西北工業(yè)大學(xué)出版社.2004.[4] 楊力學(xué).ASP商業(yè)網(wǎng)站整站集成開發(fā)[M].電子工業(yè)出版社.2007.[5] 石志國.ASP動(dòng)態(tài)網(wǎng)站編程[M].清華大學(xué)出版社.2001.[6] 李嵐.網(wǎng)絡(luò)設(shè)計(jì)與維護(hù)[M].中國物資出版社.2002.
第四篇:計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)
報(bào)告書
學(xué)院:
班級(jí):通信0902
姓名:
學(xué)號(hào):
指導(dǎo)老師:
實(shí)驗(yàn)三 交換機(jī)VLAN實(shí)驗(yàn)
SWITCH2的拓?fù)鋱D
規(guī)劃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:
設(shè)置VLAN: SWA:
SWB:
不設(shè)trunk時(shí)測(cè)試可通性 從PCA到PCC測(cè)試:不通,因現(xiàn)在的連線兩端在VLAN1中,不能承載Vlan2的信息
[root@PCA root]# ping 10.65.1.3
從PCA到PCB測(cè)試:不通:不是一個(gè)網(wǎng)段,且不在一個(gè)VLAN [root@PCA root]# ping 10.66.1.1
從PCB到PCD測(cè)試:通:因?yàn)樵谕痪W(wǎng)段內(nèi)。路徑:從switch A的f0/6到switch B的f0/6 [root@PCB root]# ping 10.66.1.3
從PCA到SWA測(cè)試:不通:不在同一網(wǎng)段內(nèi)
[root@PCA root]# ping 10.66.1.7
從PCA到SWB測(cè)試:不通:不在同一網(wǎng)段,也不在同一vlan [root@PCA root]# ping 10.66.1.8
從SWA到PCA測(cè)試:不通:不在同一網(wǎng)段
SWA#ping 10.65.1.1
從SWA到SWB測(cè)試:通:在同一個(gè)網(wǎng)段中,路徑:從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在同一網(wǎng)段中,路徑:從switch A的f0/3到switch B的f0/3,PCA和PCD、SWA、SWB不在同一網(wǎng)段內(nèi)。
從PCB到PCC、PCD、SWA、SWB的可通性依次為不通,通,通,通。PCB與PCC不在同一網(wǎng)段,PCB與PCD、SWA、SWB在同一網(wǎng)段內(nèi),路徑分別為從switch A的f0/6到switch B的f0/6;從PCB到switch A的f0/6;從switch A的f0/6到switch B的f0/1.SWITCH3的拓?fù)鋱D
(1)都不設(shè)vlan情況下,測(cè)試連通性
從PCA到PCC,PCD,SWA,SWB依次為 不通,不通,通,不通 PCA與PCC、PCD不在同一默認(rèn)vlan中,PCA與SWA在同一默認(rèn)vlan中,路徑:從PCA到switch A的f0/3,PCA與SWB不在同一默認(rèn)vlan中。
從PCB到PCC,PCD,SWA,SWB依次為不通,不通,通,不通。PCB與PCC、PCD不在同一默認(rèn)vlan中,PCB與SWA在同一默認(rèn)vlan中,路徑:從PCB到switch A的f0/6,PCB與SWB不在同一默認(rèn)vlan中。
(2)設(shè)置有vlan情況下,測(cè)試連通性
從PCA到PCC、PCB、SWA、SWB、PCD均不通:不在同一vlan
從PCB到PCC、PCD、SWA、SWB測(cè)試為不通,不通,通,不通。PCB與PCC、PCD不在同一默認(rèn)vlan中,PCB與SWA在同一默認(rèn)vlan中,路徑:從PCB到switch A的f0/6,PCB與SWB不在同一默認(rèn)vlan中。
(3)使用trunk情況下,測(cè)試連通性
從PCA到PCC、PCD、SWA、SWB的可通性依次為不通,通,不通,不通。PCA與PCC、PCD不在同一默認(rèn)vlan中,PCA與SWA在同一默認(rèn)vlan中,路徑:從PCA到switch A的f0/3,PCA與SWB不在同一默認(rèn)vlan中。
從PCB到PCC、PCD、SWA、SWB的可通性依次為通,不通,通,通。PCB到PCC設(shè)置了trunk,路徑:從switch A的f0/6到switch C的f0/1到switch B的f0/1,PCB與PCD不在同一vlan,PCB與SWA、SWB設(shè)置了trunk,路徑:從PCB到switch A的f0/6,從switch A的f0/6到switch C的f0/1到switch B的f0/1
實(shí)驗(yàn)六 路由器接口的secondary ip 裝入圖文件:router1e
設(shè)置計(jì)算機(jī)的IP和網(wǎng)關(guān):
PCA:PCA的IP地址:10.65.1.1 網(wǎng)關(guān)指向:10.65.1.2
PCB:PCB的IP地址:10.66.1.1 網(wǎng)關(guān)指向:10.66.1.2
設(shè)置交換機(jī)的IP地址: switch(config)#int vlan 1 switch(config-if)#ip address 10.66.1.8 255.255.0.0
設(shè)置路由器的接口f0/0的有兩個(gè)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
測(cè)試可通性
[root#PCA root]# ping 10.66.1.1
通:在同一網(wǎng)段,路徑:從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
不通:不在同一網(wǎng)段
switch#ping 10.66.1.1
通:在同一網(wǎng)段,路徑:從switch的f0/6到PCB
如果去掉交換機(jī)與路由的連線,PCA和PCB還可以通嗎? 不通:不在同一網(wǎng)段,需通過路由尋址,去掉線就不能通了。
可見PCA到PCB的發(fā)包是經(jīng)過路由器的,稱之為單臂路由。
這種情況PCA和PCB在同廣播域中,對(duì)工作帶寬不利。如果劃分VLAN可以隔離廣播 實(shí)驗(yàn)七 使用路由器子接口路由情況
裝入圖文件:router1e
此實(shí)驗(yàn)計(jì)算機(jī)和交換機(jī)的IP地址和網(wǎng)關(guān)不變,但要求交換機(jī)工作在兩個(gè)VLAN的情況下,一個(gè)是原有的默認(rèn)VALN,另一個(gè)是新設(shè)置的VLAN 2,含f0/
5、f0/6。1.設(shè)置交換機(jī),增加一個(gè)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)#
2.路由器f0/0 有兩個(gè)子接口 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.測(cè)試可通性:都通,路由器設(shè)置了兩個(gè)子接口,使其在同一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
在使用一個(gè)路由器接口的情況下,如果下接的網(wǎng)絡(luò)含有不同的VLAN,則要求路由器的接口要?jiǎng)澐殖勺咏涌?,并綁定isl協(xié)議。在交換機(jī)上通過多個(gè)VLAN的接口,要設(shè)置成trunk。如果去掉交換機(jī)與路由的連線,PCA和PCB還可以通嗎? 不通:不在同一網(wǎng)段,需通過路由尋址,去掉線就不能通了。
可見這也是一種單臂路由。
實(shí)驗(yàn)九 三個(gè)路由器的靜態(tài)路由
裝入圖文件:router3
設(shè)置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-->
設(shè)置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
設(shè)置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
設(shè)置從PCA到PCC的靜態(tài)路由 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接口都在同一個(gè)網(wǎng)段上,所以能通,路徑:從PCA到switch B的F0/0 S0/1到switch A的S0/0 S0/1到switch C的S0/0 F0/1到PCD
使用默認(rèn)路由
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
通:因?yàn)檠b入文件時(shí)有默認(rèn)的動(dòng)態(tài)路由存在路徑:從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)
實(shí)驗(yàn)十 三個(gè)路由器動(dòng)態(tài)路由實(shí)驗(yàn)
裝入圖文件:router3
實(shí)驗(yàn)網(wǎng)絡(luò)與上個(gè)實(shí)驗(yàn)相同,ip地址也不變,現(xiàn)在用動(dòng)態(tài)路由實(shí)現(xiàn)網(wǎng)絡(luò)的連通。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
從計(jì)算機(jī)PCA 測(cè)試到各點(diǎn)的連通性。都通:由于路由器接口都已經(jīng)激活,可以相互連通:路徑: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
實(shí)驗(yàn)十一 基本訪問控制列表
裝入文件1
1.配置路由達(dá)到網(wǎng)絡(luò)各點(diǎn)可通。
本實(shí)驗(yàn)使用有動(dòng)態(tài)路由,也可以使用靜態(tài)路由。假設(shè)網(wǎng)絡(luò)是通暢的。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 應(yīng)該是可以通的。由于與ROA和ROC相連的ROB接口都在同一個(gè)網(wǎng)段上,路徑:從 PCA到switch B的F0/0 S0/1到switch A的S0/0 S0/1到switch C的S0/0 F0/1到PCD
在ROB的s0/0寫一個(gè)輸入的訪問控制列表: ROB(config)#access-list 1 deny any ROB(config)#int s0/0 ROB(config-if)#ip access-group 1 in ROB#sh access-list 測(cè)試PCA至PCD的聯(lián)通性。(deny)命令所示為S0/0讀入控制,題意ROB S0/0為10.68.1.1,PCA的IP為10.65,1,1不包含于ROB VLAN中,所以不能訪問
測(cè)試PCC至PCD的聯(lián)通性。(permit)在同一個(gè)路由器下,通過路由器尋址能找到對(duì)方的IP,所以能通, PCC到switch C的f0/0 F0/1到PCD
測(cè)試PCD至PCA的聯(lián)通性。(permit)由題意由于命令所示為S0/0讀入控制,所以ROB能訪問ROA,所以訪問列表設(shè)置無效,所以兩者之間的訪問不受控制,所以能PING通, 從PCD到SWC的F0/1 S0/0到SWA的S0/0 S0/0到SWB的S0/1 F0/0到PCA
2.刪除這個(gè)列表
ROB(config)#no access-list 1 ROB(config)# int s0/0 ROB(config-if)#no ip access-group 1 in
二者都可能實(shí)現(xiàn)去掉訪問列表的目的。前者是從列表號(hào)角度刪除,后者是從接口及輸入和輸出的角度刪除??梢酝ㄟ^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
再測(cè)試PCA至PCD的聯(lián)通性。(deny)ROA設(shè)置拒絕了PCA的訪問
再測(cè)試PCB至PCD的聯(lián)通性。(permit)由題意ROA中的S0/1為10.68.1.2 PCB的IP為10.66.1.1,不包含于S0/1 VLAN中,由于命令所示為S0/0由于是輸出控制,能訪問,所以訪問列表設(shè)置無效,不加控制,所以能PING通, 從PCB到SWB的F0/1 S0/1到SWA 的S0/0 S0/1到SWC的S0/0 F0/1到PCD
再測(cè)試PCD至PCA的聯(lián)通性。(permit)由于是輸出控制,所以對(duì)輸入不做要求,能通,所以輸出訪問列表無效,對(duì)輸入不加控制,所以能PING通, 從PCD到SWC的F0/1-S0/0到SWA的S0/0-S0/0到SWB的S0/1-F0/0到PCA
4.重新設(shè)置各路由接口有電腦的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
測(cè)試PCA至PCD的聯(lián)通性。(deny)PCA的IP為10.65.1.1按理來說應(yīng)該所有的訪問都允許,由于命令所示為S0/0讀入控制,題意ROB S0/0為10.68.1.1,PCA的IP為10.65,1,1不包含于ROB VLAN中所以不通
測(cè)試PCB至PCD的聯(lián)通性。(permit)P CB的IP為10.66.1.1屬于deny 10.0.0.0 0.255.255.255,所以訪問被拒絕,所以PING不通
測(cè)試PCD至PCA的聯(lián)通性。(permit)PCD的IP為10.74.1.1屬于deny 10.0.0.0 0.255.255.255,按理來說應(yīng)該是拒絕的,但是DENY屬于源程序拒絕訪問,而PCD先到S0/1,在通過S0/1與S0/0進(jìn)行信息傳遞,所以能到達(dá)PCA,所以設(shè)置讀入列表參數(shù)無效,對(duì)PCD不做限制, 從PCD到SWC的F0/1-S0/0到SWA的S0/0-S0/0到SWB的S0/1-F0/0到PCA
接口的ip地址,計(jì)算機(jī)的ip地址,請(qǐng)自定
實(shí)驗(yàn)十二 擴(kuò)展訪問控制列表
裝入文件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處在同一個(gè)路由器下,通過路由器尋址可以相互PING通,從PCC到SWC的F0/0-F0/1到PCD
[root@PCD root]#ping 10.65.1.1(通)因?yàn)镽OB的S0/0為輸出控制,所以當(dāng)PCD通過外部訪問ROB某個(gè)端口下的PCA時(shí),是不受控制的,所以ROB的S0/0的輸出對(duì)PCD的訪問是無效的,所以鏈路不加限制,從 PCD到SWC的F0/1-S0/0到SWA的S0/0-S0/0到SWB的S0/1-F0/0到PCA
2.刪除這個(gè)列表
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網(wǎng)絡(luò)訪問 10.74.1.1計(jì)算機(jī)(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(默認(rèn)為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在同一個(gè)路由器下,所以能通過路由器尋址進(jìn)行PING通, 從PCC到SWC的F0/0-F0/1到PCD
[root@PCD root]#ping 10.65.1.1(通)由于ROA的S0/0為輸出控制,所以對(duì)輸入沒有任何要求,所以對(duì)輸出控制列表設(shè)置無效,PCD訪問PCA不受限制, 從PCD到SWC的F0/1-S0/0到SWA的S0/0-S0/0到SWB的S0/1-F0/0到PCA
心得體會(huì)
從實(shí)驗(yàn)三中學(xué)會(huì)了如何規(guī)劃ip地址,設(shè)置vlan,將連接兩個(gè)交換機(jī)的接口設(shè)置成trunk等,知道了寫代碼時(shí)一定得仔細(xì),否則打錯(cuò)了下面就不能ping通了。
從實(shí)驗(yàn)六中,我學(xué)會(huì)了設(shè)置計(jì)算機(jī)和交換機(jī)的IP和網(wǎng)關(guān),設(shè)置路由器的接口的ip地址等。
從實(shí)驗(yàn)七中,我學(xué)會(huì)了設(shè)置交換機(jī),增加一個(gè)vlan,設(shè)置路由器的子接口,了解了isl協(xié)議,isl協(xié)議:交換鏈路內(nèi)協(xié)議(ISL),是思科私有協(xié)議,主要用于維護(hù)交換機(jī)和路由器間的通信流量等 VLAN 信息。ISL 主要用于實(shí)現(xiàn)交換機(jī)、路由器以及各節(jié)點(diǎn)(如服務(wù)器所使用的網(wǎng)絡(luò)接口卡)之間的連接操作。為支持 ISL 功能特征,每臺(tái)連接設(shè)備都必須采用 ISL 配置。ISL 所配置的路由器支持 VLAN 內(nèi)通信服務(wù)。非 ISL 配置的設(shè)備,則用于接收由 ISL 封裝的以太幀(Ethernet Frames),通常情況下,非 ISL 配置的設(shè)備將這些接收的幀及其大小歸因于協(xié)議差錯(cuò)。
從實(shí)驗(yàn)九中,我學(xué)會(huì)了設(shè)置靜態(tài)路由。
從實(shí)驗(yàn)十中,我學(xué)會(huì)了用動(dòng)態(tài)路由實(shí)現(xiàn)網(wǎng)絡(luò)的連通。從實(shí)驗(yàn)十一中,我學(xué)會(huì)了基本訪問控制列表的使用。從實(shí)驗(yàn)十二中,我學(xué)會(huì)了如何擴(kuò)展訪問控制列表。
最后,謝謝老師這幾天的指導(dǎo),真的讓我學(xué)到了很多很多。
第五篇:計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)——IP數(shù)據(jù)報(bào)流量統(tǒng)計(jì)
摘 要
本課程設(shè)計(jì)主要是編制程序,監(jiān)控網(wǎng)絡(luò),捕獲一段時(shí)間內(nèi)網(wǎng)絡(luò)上的IP數(shù)據(jù)包,按IP數(shù)據(jù)包的源地址統(tǒng)計(jì)出該源地址在該時(shí)間段內(nèi)發(fā)出的IP包的個(gè)數(shù),將其寫入日志文件中或用圖形表示出來。程序中會(huì)用到Winpcap,它主要功能在于獨(dú)立于主機(jī)協(xié)議發(fā)送和接收原始數(shù)據(jù)報(bào)。本次課程設(shè)計(jì)中用VC++實(shí)現(xiàn)基于Winpcap的網(wǎng)絡(luò)數(shù)據(jù)包的捕獲和統(tǒng)計(jì),基于Winpcap的應(yīng)用程序?qū)⒏鶕?jù)獲取網(wǎng)絡(luò)設(shè)備列表;選擇網(wǎng)卡并打開;設(shè)置過濾器;捕獲數(shù)據(jù)包或者發(fā)送數(shù)據(jù)包;列出網(wǎng)卡列表,讓用戶選擇可用的網(wǎng)卡的步驟進(jìn)行編寫,同時(shí)對(duì)于TCP/IP協(xié)議以及IP數(shù)據(jù)抱的格式有了進(jìn)一步的了解和掌握。通過編寫程序從而實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)中IP數(shù)據(jù)包流量的統(tǒng)計(jì)。
關(guān)鍵詞: IP數(shù)據(jù)包;流量統(tǒng)計(jì);Winpcap;VC++ 1 引 言
隨著Internet技術(shù)的發(fā)展,基于IP協(xié)議的應(yīng)用成為網(wǎng)絡(luò)技術(shù)研究與軟件開發(fā)的一個(gè)重要基礎(chǔ),因此學(xué)習(xí)網(wǎng)絡(luò)層以基本概念,了解IP協(xié)議的基本內(nèi)容,對(duì)于掌握TCP/IP協(xié)議的主要內(nèi)容和網(wǎng)絡(luò)課程的學(xué)習(xí)是十分重要的,通過本次課程設(shè)計(jì),有助于熟悉IP數(shù)據(jù)包格式并加深對(duì)IP協(xié)議的理解。
1.1 課程設(shè)計(jì)目的
本次課程設(shè)計(jì)主要是通過用VC++編程實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)中IP數(shù)據(jù)包流量的統(tǒng)計(jì),實(shí)際上是編制程序,監(jiān)控網(wǎng)絡(luò),捕獲一段時(shí)間內(nèi)網(wǎng)絡(luò)上的IP數(shù)據(jù)包,按IP數(shù)據(jù)包的源地址統(tǒng)計(jì)出該源地址在該時(shí)間段內(nèi)發(fā)出的IP包的個(gè)數(shù),同時(shí)應(yīng)用Winpcap,Winpcap提供了很好的捕獲網(wǎng)絡(luò)數(shù)據(jù)包的方法,通過本次課程設(shè)計(jì)可以將VC++知識(shí)與Winpcap結(jié)合起來實(shí)現(xiàn)在一段時(shí)間內(nèi)對(duì)IP數(shù)據(jù)包的流量進(jìn)行統(tǒng)計(jì)。加深了對(duì)Winpcap的理解和運(yùn)用能力,同時(shí)也增長了知識(shí),開闊了視野,對(duì)于以后的學(xué)習(xí)有很大的幫助。
1.2 課程設(shè)計(jì)的要求
(1)理解運(yùn)用VC++軟件實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)中的IP數(shù)據(jù)抱流量的統(tǒng)計(jì)方法和步驟。(2)鍛煉獨(dú)立編程和查閱文獻(xiàn)資料解決問題的能力。
(3)通過課程設(shè)計(jì)培養(yǎng)嚴(yán)謹(jǐn)?shù)目茖W(xué)態(tài)度,認(rèn)真的工作作風(fēng)。
1.3 設(shè)計(jì)平臺(tái)
Microsoft Visual C++ 6.0 2 設(shè)計(jì)原理
IP是ICP/IP協(xié)議體系中的網(wǎng)絡(luò)層協(xié)議,TCP、UDP、ICMP和IGMP等其他協(xié)議都是以IP協(xié)議為基礎(chǔ)的。程序中用到的Winpcap是 Windows packetcapture的縮寫,這是UNIX下的lipbcap移植到Windows下的產(chǎn)物,是Win32環(huán)境下數(shù)據(jù)包捕獲的開放代碼函數(shù)庫。
Winpcap由內(nèi)核級(jí)的數(shù)據(jù)包過濾器,底層動(dòng)態(tài)鏈接庫(packet.dll)和一個(gè)高層的獨(dú)立于系統(tǒng)的庫(wpcap.dll)組成。
2.1 IP協(xié)議
IP是TCP/IP模型中的網(wǎng)絡(luò)層協(xié)議,又稱為互聯(lián)網(wǎng)協(xié)議,是支持網(wǎng)間互連的數(shù)據(jù)報(bào)協(xié)議,它與TCP協(xié)議一起構(gòu)成了TCP/IP協(xié)議族的核心。它提供網(wǎng)間連接的完善功能,包括IP數(shù)據(jù)報(bào)規(guī)定互聯(lián)網(wǎng)范圍內(nèi)的IP地址格式。在因特網(wǎng)中IP協(xié)議是能使連接到網(wǎng)上的所有計(jì)算機(jī)網(wǎng)絡(luò)實(shí)現(xiàn)相互通信的一套規(guī)則,規(guī)定了計(jì)算機(jī)在因特網(wǎng)上進(jìn)行通信時(shí)應(yīng)當(dāng)遵守的規(guī)則。任何廠家生產(chǎn)的計(jì)算機(jī)系統(tǒng),只要遵守IP協(xié)議就可以與因特網(wǎng)互連互通。IP地址具有唯一性,根據(jù)用戶性質(zhì)的不同,可以分為不同的類別。
IP協(xié)議的特點(diǎn)如下:
IP協(xié)議是一種不可靠、無連接的數(shù)據(jù)報(bào)傳送協(xié)議。IP協(xié)議是點(diǎn)對(duì)點(diǎn)的網(wǎng)絡(luò)層通信協(xié)議。IP協(xié)議向通信層隱藏了物理網(wǎng)絡(luò)的差異。
IP協(xié)議以一種數(shù)據(jù)報(bào)的形式傳輸數(shù)據(jù),每個(gè)數(shù)據(jù)報(bào)獨(dú)立傳輸,可能通過不同路徑傳輸,因此可能不按順序到達(dá)目的地,或者出現(xiàn)重復(fù)。
2.2 關(guān)于Winpcap庫
Winpcap(windows packet capture)是windows平臺(tái)下一個(gè)開源的、公共的基于windows的網(wǎng)絡(luò)接口API庫。主要為win32應(yīng)用程序提供訪問網(wǎng)絡(luò)底層的能力。Winpcap的主要功能在于獨(dú)立于主機(jī)協(xié)議(如TCP/IP)發(fā)送和接收原始數(shù)據(jù)報(bào)。也就是說,Winpcap不能阻塞、過濾或控制其他應(yīng)用程序數(shù)據(jù)報(bào)的收發(fā),它只是監(jiān)聽共享網(wǎng)絡(luò)上傳送的數(shù)據(jù)報(bào)。
其功能有:捕獲原始數(shù)據(jù)包,包括在共享網(wǎng)絡(luò)上各主機(jī)發(fā)送接收的以及相互之間交換的數(shù)據(jù)包;在數(shù)據(jù)包發(fā)往應(yīng)用程序之前,按照自定義的規(guī)則將某些特殊的數(shù)據(jù)包過濾掉;在網(wǎng)絡(luò)上發(fā)送原始數(shù)據(jù)包;收集網(wǎng)絡(luò)通信過程中的統(tǒng)計(jì)信息。Winpcap是針對(duì)win32平臺(tái)上的抓包和網(wǎng)絡(luò)分析的一個(gè)架構(gòu),它包括一個(gè)核心態(tài)的包過濾器,一個(gè)底層的動(dòng)態(tài)鏈接庫(packet.dll)和一個(gè)高層的不依賴于系統(tǒng)的庫(wpcap.dll)。它由Packet、NPF(Netgroup Packet Filter)、packet.dll、wpcap.dll、Application組成,首先,抓包系統(tǒng)必須繞過操作系統(tǒng)的協(xié)議來訪問在網(wǎng)絡(luò)上傳輸?shù)脑紨?shù)據(jù)包,這就要求一部分運(yùn)行在操作系統(tǒng)核心內(nèi)部,直接與網(wǎng)絡(luò)接口驅(qū)動(dòng)交互。這個(gè)部分是系統(tǒng)依賴的,在Winpcap的解決方案里它被認(rèn)為是一個(gè)設(shè)備驅(qū)動(dòng),稱作NPF。其次,抓包系統(tǒng)必須有用戶級(jí)的程序接口,通過這些接口,用戶程序可以利用內(nèi)核驅(qū)動(dòng)提供的高級(jí)特性。Winpcap提供了兩個(gè)不同的庫:packet.dll和wpcap.dll。前者提供了一個(gè)底層API,伴隨著一個(gè)獨(dú)立于Microsoft操作系統(tǒng)的編程接口,這些API可以直接用來訪問驅(qū)動(dòng)的函數(shù);后者導(dǎo)出了一組更強(qiáng)大的與libpcap一致的高層抓包函數(shù)庫。這些函數(shù)使得數(shù)據(jù)包的捕獲以一種與網(wǎng)絡(luò)硬件和操作系統(tǒng)無關(guān)的方式進(jìn)行。3 程序代碼設(shè)計(jì)步驟
根據(jù)流量設(shè)計(jì)程序的主要功能,相應(yīng)的算法如下: 取得當(dāng)前網(wǎng)絡(luò)設(shè)備列表;
將用戶選擇的網(wǎng)卡以混雜模式打開,以接收到所有的數(shù)據(jù)包; 設(shè)置過濾器;
捕獲IP數(shù)據(jù)包的源地址進(jìn)行統(tǒng)計(jì)(用鏈表結(jié)構(gòu)進(jìn)行實(shí)現(xiàn))。
獲取網(wǎng)卡列表是為了得到網(wǎng)卡的相關(guān)信息,以便于用戶進(jìn)行選擇,選取Ethermet網(wǎng)卡是用戶所選擇的網(wǎng)卡類型,編譯設(shè)置過濾器是為了編譯并設(shè)置過濾器是為了只捕獲網(wǎng)絡(luò)數(shù)據(jù)流的某些數(shù)據(jù),打開網(wǎng)卡既將網(wǎng)卡設(shè)置為混雜(統(tǒng)計(jì))模式是為了接受所有經(jīng)過網(wǎng)卡的數(shù)據(jù)包,包括不是發(fā)給本機(jī)的數(shù)據(jù)包,開始主循環(huán)以是否超時(shí)為判斷條件,循環(huán)體內(nèi)主要有捕獲IP數(shù)據(jù)包、將IP包的源地址加入鏈表、條件判斷,循環(huán)結(jié)束后輸出鏈表內(nèi)容,程序至此結(jié)束。
現(xiàn)將其每一步的具體步驟簡述如下:
3.1取得網(wǎng)絡(luò)適配器列表
//取得網(wǎng)絡(luò)適配器列表步驟中,alldevs是pcap_if_it指針,指向鏈表頭,errbuf是char類型數(shù)組,存儲(chǔ)錯(cuò)誤信息。
pcap_findalldevs(&alldevs,errbuf);
cout<<”網(wǎng)絡(luò)適配器列表:”<<’n’;
for(d=alldevs;d;d=d->next)
{
cout<<++i<<“:” if(d->description) cout<<“" else cout<<”No description available!“<<'n'; } 3.2 指定要監(jiān)聽的網(wǎng)絡(luò)適配器并打開 cout<<”輸入要監(jiān)聽的網(wǎng)絡(luò)適配器號(hào):” for(d=alldevs,i=0;inext,i++); fp=pcap_open_live(d->name,65536,1,1000,errbuf);3.3 編譯并設(shè)置過濾器 //編譯過濾器,fp指向打開的網(wǎng)絡(luò)適配器,fcode為編譯完成后的過濾器存儲(chǔ)地址,“tcp“給出了過濾條件,下一個(gè)參數(shù)表示是否被優(yōu)化(0為false,1為true),最后一個(gè)參數(shù)給出了子網(wǎng)掩碼。 pcap_compile(fp,&fcode,”tcp”,1,netmask) pcap_setfilter(fp,&fcode)3.4 設(shè)置網(wǎng)絡(luò)適配器為統(tǒng)計(jì)模式 if(pcap_setmode(fp,MODE_STAT)<0) { cout<<”n設(shè)置網(wǎng)絡(luò)適配器模式錯(cuò)誤!n”; pcap_close(fp); } 3.5 開始主循環(huán),調(diào)用回調(diào)函數(shù)顯示網(wǎng)絡(luò)流量統(tǒng)計(jì)信息 //pcap_loop由Winpcap庫定義,對(duì)每個(gè)采集來的數(shù)據(jù)包都用ProcessPacket函數(shù)進(jìn)行處理,fp指向打開的網(wǎng)絡(luò)適配器 pcap_loop(fp,0,dispatcher_handler,(PUCHAR)&st_ts); pcap_close(fp);3.6 回調(diào)函數(shù)的實(shí)現(xiàn) //對(duì)于捕獲到的每一個(gè)數(shù)據(jù)包應(yīng)用此回調(diào)函數(shù) 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; //計(jì)算距上一個(gè)數(shù)據(jù)包的時(shí)間延遲,以ms為單位 //這個(gè)值是從與一個(gè)數(shù)據(jù)包相關(guān)的時(shí)間戳中截獲的delay=(header->ts.tv_sec-old_ts->tv_sec)*1000000-old_ts->tv_usec+header->ts.tv_usec; //獲得每秒的比特?cái)?shù) Bps.QuadPart=(((*(LONGLONG*)(pkt_data+8))*8*1000000)/(delay)); //獲得每秒的數(shù)據(jù)包數(shù) Pps.QuadPart=(((*(LONGLONG*)(pkt_data))*1000000)/(delay)); //將時(shí)間戳轉(zhuǎn)變位可讀的標(biāo)準(zhǔn)格式 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 結(jié)果及分析 安裝好WinPcap軟件,在VC++界面上點(diǎn)擊工具->選項(xiàng)->目錄。添加Include文件夾下的所有文件和Lib下的所有內(nèi)容,調(diào)試完程序無誤后,點(diǎn)擊開始—>運(yùn)行“cmd”進(jìn)入目標(biāo)文件夾Debug下運(yùn)行EXE文件。此時(shí)程序會(huì)檢測(cè)電腦系統(tǒng)中的網(wǎng)卡,等待程序的運(yùn)行結(jié)果.圖 捕獲的IP地址和數(shù)據(jù)包的信息 常見問題及解決方法 在剛開始做此課程設(shè)計(jì)的時(shí)候我只編寫了主程序代碼,并沒有建立工程,后來通過查找資料及文獻(xiàn)才知道要建立一個(gè)C++應(yīng)用工程,而且程序中用到的Winpcap庫文件C++中并沒有,需要自己下載WinPcap_4_1_1.exe和WpdPack_4_1_1.zip,前者是Winpcap的開發(fā)程序,后者是inlude文件和lib文件,這些都是需要自己手動(dòng)添加的,這里include和lib文件夾里的東西VC++6.0里面沒有,出現(xiàn)error: Cannot open include file:’pcap.h’:No such file or directory這個(gè)問題,就需要添加。具體步驟如下: 第一步: 點(diǎn)菜單欄上的“工具“,再點(diǎn)擊下拉菜單中的”選項(xiàng)“對(duì)話框把winpcap開發(fā)包里面的lib文件添加進(jìn)去。 第二步: 點(diǎn)擊菜單欄里的工程——設(shè)置,選擇連接在對(duì)象/庫模塊中輸入wpcap.lib和packet.lib,再點(diǎn)C/C++ 在“預(yù)處理程序定義”下輸入WPCAP和HAVE_REMOTE,要用逗號(hào)隔開。 至此,Winpcap環(huán)境已部署好了不會(huì)再出錯(cuò)了。 接下來出錯(cuò)的是程序中的一些函數(shù)的參數(shù),比如說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)函數(shù)的參數(shù)在程序編譯的時(shí)候會(huì)報(bào)錯(cuò),通過搜集資料及與同學(xué)交流初步更正了錯(cuò)誤,但是程序并不是很順利地運(yùn)行出來。