网络嗅探器的编程仿真
- 格式:doc
- 大小:64.00 KB
- 文档页数:4
摘要:随着各种新的网络技术的不断出现、应用和发展,计算机网络的应用越来越广泛,其作用也越来越重要。
Internet 的安全已经成为亟待解决的问题。
多数黑客入侵成功并植入后门后的第一件事就是选择一个合适当前网络的嗅探器,以获得更多的受侵者的信息。
嗅探器是一种常用的收集有用数据的方法,可以作为分析网络数据包的设备。
网络嗅探器就是利用计算机的网络接口截获其他计算机的数据报文的一种工具,而且它与一般的键盘捕获程序不同。
键盘捕获程序捕获在终端上输入的键值,而嗅探器捕获的则是真实的网络报文.关键词: Internet;网络嗅探器;网络数据包;网络报文;目录1 引言 (1)1.1 开发背景 (1)1.2 开发意义 (1)2 系统分析 (2)2.1 设计概述 (2)2.1.1 实现目标 (2)2.1.2 开发环境 (2)2.2 开发相关技术简介 (2)2.2.1 C# 语言简介 (2)2.2.2 嗅探技术简介 (3)2.2.3 TCP/IP 协议 (4)2.2.4 数据包简介 (6)2.3 可行性分析 (7)3 详细设计 (8)3.1 设计原理 (8)3.2 功能说明 (11)3.3 系统实施 (11)3.4 系统测试 (13)4 论文总结 (16)5 参考文献 (17)6 致谢 (17)第一章引言1.1开发背景随着各种新的网络技术的不断出现、应用和发展,计算机网络的应用越来越广泛,其作用也越来越重要。
但是由于计算机系统中软硬件的脆弱性和计算机网络的脆弱性以及地理分布的位置、自然环境、自然破坏以及人为因素的影响,不仅增加了信息存储、处理的风险,也给信息传送带来了新的问题。
计算机网络安全问题越来越严重,网络破坏所造成的损失越来越大。
Internet的安全已经成为亟待解决的问题。
多数黑客入侵成功并植入后门后的第一件事就是选择一个合适当前网络的嗅探器,以获得更多的受侵者的信息。
嗅探器是一种常用的收集有用数据的方法,可以作为分析网络数据包的设备。
网络与信息安全课程设计网络嗅探器的设计和实现学院:计算机科学与技术班级:网络工程08-1班姓名:学号:指导老师:目录一、什么是嗅探器--------------------------------------------1二、嗅探器的作用---------------------------------------------1三、网络嗅探器的原理-----------------------------------------1四、反嗅探技术----------------------------------------------7五、网络嗅探器的设计-----------------------------------------8六、结语---------------------------------------------------14参考书目--------------------------------------------------14网络嗅探器的实际与实现一、什么是嗅探器嗅探器,可以理解为一个安装在计算机上的窃听设备它可以用来窃听计算机在网络上所产生的众多的信息。
简单一点解释:一部电话的窃听装置, 可以用来窃听双方通话的内容,而计算机网络嗅探器则可以窃听计算机程序在网络上发送和接收到的数据。
可是,计算机直接所传送的数据,事实上是大量的二进制数据。
因此, 一个网络窃听程序必须也使用特定的网络协议来分解嗅探到的数据,嗅探器也就必须能够识别出那个协议对应于这个数据片断,只有这样才能够进行正确的解码。
计算机的嗅探器比起电话窃听器,有他独特的优势:很多的计算机网络采用的是“共享媒体"。
也就是说,你不必中断他的通讯,并且配置特别的线路,再安装嗅探器,你几乎可以在任何连接着的网络上直接窃听到你同一掩码范围内的计算机网络数据。
我们称这种窃听方式为“基于混杂模式的嗅探”(promiscuous mode)。
计算机学院课程设计专业:课程名称: TCP/IP协议分析实验课题名称: 网络嗅探器程序设计教师:学号: 姓名:时间: 2011 年月日网络嗅探器程序设计一. 需求分析.............................................................................................................................. - 3 -二. 技术分析.............................................................................................................................. - 3 -2.1 Wincap的基本结构................................................................................................... - 3 -2.2 抓包系统 ................................................................................................................. - 4 -三. 软件设计 (5)3.1 总体规划 (5)3.2 分块设计...................................................................................................................... - 5 -3.2.1 获得网卡信息.................................................................................................. - 5 -3.2.2 数据包过滤...................................................................................................... - 5 -3.2.3 数据包捕获...................................................................................................... - 5 -3.2.4 数据包分析...................................................................................................... - 5 -四. 代码实现 (6)4.1 获得设备列表 (6)4.2 打开一个适配器开始捕获数据包.............................................................................. - 6 -4.3 过滤数据包.................................................................................................................. - 6 -4.4 获取包数据.................................................................................................................. - 7 -4.5 解析数据包 (8)4.6 将数据包存入文件...................................................................................................... - 9 - 五软件图形界面 (10)5.1 软件实现图: (10)5.2 捕获UDP数据包:.................................................................................................... - 10 -5.3 捕获到的数据包解析: (11)六总结...................................................................................................................................... - 11 - 参考文献.................................................................................................................................... - 11 -网络嗅探器程序设计摘要:随着网络入侵的不断发展,网络安全变得越来越重要,利用一种方法对网络数据包进行高效捕获,并进行一系列的分析,从而进行可靠的网络安全管理显得尤为重要。
毕业论文题目:网络嗅探器的设计与实现学院:数学与信息工程学院专业:计算机科学与技术此毕业设计还包括以下文件,需要的下载后留下邮箱方便发给大家网络嗅探器的设计与实现摘要:嗅探器,英文可以翻译为Sniffer,是一种基于被动侦听原理的网络分析方式。
使用这种技术方式,可以监视网络的状态、数据流动情况以及网络上传输的信息。
实际上Sniffer技术被广泛地应用于网络故障诊断、协议分析、应用性能分析和网络安全保障等各个领域。
本次设计完成了一个较为简单的嗅探器,它实现了对本机的网络监控的作用,对IP包进行了分析,获得其运行的信息。
信息包括了源IP地址,目标IP地址,协议,时间,吞吐量,识别码,校验码,长度等等。
也可以保存所需要的包信息,也可选择所要嗅探的协议类型,以便获得要想的信息。
同时,通过POP3服务器设置端口的值来获取数据包,得到登入邮箱的帐号和密码。
关键词:嗅探器;协议;数据包;监听;吞吐量Design and Implementation of snifferZhang yin(College of Mathematics and Information Engineering, Jinxing University)Abstract:Sniffer, can be translated into English Sniffer,is a passive network analysis method based on the principle of listener. The use of such technology, can monitor the status of networks, data flows and information of network transmission. In fact Sniffer technology is widely used in network diagnosis, analysis of the agreement, performance analysis of the application and network security, and other fields.The design complete a relatively simple sniffer, it realized that the local network monitoring role, analysis the information of IP packet and get their information about the running system. Information includes the source address,destination address, protocol, time, throughput, identification, checking code, length and so on. It can save the information of required packet, and can choose the type of protocol to be sniffing, in order to get to the information.Meanwhile,it can get the Email’s log-mail account and password by analysis the port valu of the POP3 Server.Keywords:Sniffer; Protocol; Data packet; Monitor; Throughput目录1 绪论 (5)1.1 课题背景 (5)1.2 网络嗅探器的概述 (6)1.2.1 网络嗅探器的概念与原理 (6)1.2.2 网络嗅探的检测和防范 (7)1.2.3 网络嗅探器软件需要解决的问题 (8)2 网络嗅探器设计相关技术简述 (8)2.1 在交错环境下的嗅探技术 (8)2.1.1 ARP欺骗 (8)2.1.2 交换机MAC地址表溢出 (9)2.1.3 MAC地址伪造 (9)2.1.4 ICMP路由器发现协议欺骗 (9)2.1.5 ICMP重定向攻击 (9)2.2 C#语言编程 (10)2.3 网络协议 (10)2.3.1 IP (10)2.3.2 TCP (11)2.3.3 UDP (11)3 系统需求分析 (12)3.1 系统性能要求 (12)3.2 软件实现的功能 (12)4 网络嗅探器的相关拓展 (14)总结 (16)致谢 (16)参考文献 (17)附件 (18)1 绪论嗅探器,Sniffer是一种常用的收集有用数据方法,这些数据可以是用户的帐号和密码,可以是一些商用机密数据等等。
网络攻防技术实验报告嗅探器的设计与实现姓名:张梦学号:一、嗅探器的设计原理嗅探器作为一种网络通讯程序,也是通过对网卡的编程来实现网络通讯的,对网卡的编程也是使用通常的套接字(socket )方式来进行。
但是,通常的套接字程序只能响应与自己硬件地址相匹配的或是以广播形式发出的数据帧,对于其他形式的数据帧比如已到达网络接口但却不是发给此地址的数据帧,网络接口在验证投递地址并非自身地址之后将不引起响应,也就是说应用程序无法收取到达的数据包。
而网络嗅探器的目的恰恰在于从网卡接收所有经过它的数据包,这些数据包即可以是发给它的也可以是发往别处的。
显然,要达到此目的就不能再让网卡按通常的正常模式工作,而必须将其设置为混杂模式。
二、嗅探器的开发基础1、嗅探器的实现目标(1)实现网络嗅探器的界面。
(2)实现抓取数据包的功能。
(3)实现暂停抓取数据包功能。
(4)实现清空列表功能。
2、嗅探器的技术支持简介(1)TCP/IP 协议分析TCP/IP 是供已连接因特网的计算机进行通信的通信协议。
TCP/IP 定义了电子设备(比如计算机)如何连入因特网,以及数据如何在它们之间传输的标准。
TCP/IP 是一个四层的分层体系结构。
高层为传输控制协议,它负责聚集信息或把文件拆分成更小的包。
这些包通过网络传送到接收端的TCP层,接收端的TCP层把包还原为原始文件。
低层是网际协议,它处理每个包的地址部分,使这些包正确的到达目的地。
网络上的网关计算机根据信息的地址来进行路由选择。
即使来自同一文件的分包路由也有可能不同,但最后会在目的地汇合。
TCP/IP 使用客户端/ 服务器模式进行通信。
TCP/IP通信是点对点的,意思是通信是网络中的一台主机与另一台主机之间的。
TCP/IP 与上层应用程序之间可以说是“没有国籍的”,因为每个客户请求都被看做是与上一个请求无关的。
正是它们之间的“无国籍的”释放了网络路径,才是每个人都可以连续不断的使用网络。
实验一、基于WinPcap的网络嗅探器设计1、目的与要求◆掌握基于WinPcap的网络编程模式。
◆理解并能应用WinPcap设计并实现网络数据包的捕获、解析。
2、实验设备与环境连网PC机(至少一台)。
计算机硬件要求:Intel Pentium5 处理器、256MB以上内存,Ethernet网卡,网线若干。
计算机软件要求:MS Windows 9x/2000/XP操作系统,TCP/IP协议,WinPcap430,Visual c++6.0/.net系统。
3、实验内容与步骤:在程序设计之前,请参照提供的软件安装WinPcap。
之后,按照如下步骤操作:步骤1:在VC++ 6.0下创建一个DOS命令行程序,工程名:201200824302步骤2:打开main()函数,在主程序中增加如下头文件和常量定义:头文件添加如下:#include <pcap.h>#define LINE_LEN 16代码内容如下:pcap_if_t *alldevs, *d;pcap_t *fp;u_int inum, i=0;char errbuf[PCAP_ERRBUF_SIZE];int res;struct pcap_pkthdr *header;const u_char *pkt_data;printf("pktdump_ex: prints the packets of the network using WinPcap.\n");printf("Usage: pktdump_ex [-s source]\n\n"" Examples:\n"“pktdump_ex -s file.acp\n""pktdump_ex \\Device\\NPF_{C8736017-F3C3-4373-94AC-9A34B7DAD998}\n\n"); if(argc < 3){printf("\nNo adapter selected: printing the device list:\n");// The user didn't provide a packet source: Retrieve the local device listif(pcap_findalldevs(&alldevs, errbuf) == -1){fprintf(stderr,"Error in pcap_findalldevs_ex: %s\n", errbuf);exit(1);}/* Print the list */for(d=alldevs; d; d=d->next){printf("%d. %s\n ", ++i, d->name);if (d->description)printf(" (%s)\n", d->description);elseprintf(" (No description available)\n");}if (i==0){printf("\nNo interfaces found! Make sure WinPcap is installed.\n");return -1;}printf("Enter the interface number (1-%d):",i);scanf("%d", &inum);if (inum < 1 || inum > i){printf("\nInterface number out of range.\n");/* Free the device list */pcap_freealldevs(alldevs);return -1;}/* Jump to the selected adapter */if ((fp = pcap_open_live(argv[2], // name of the device65536, // portion of the packet to capture. // 65536 grants that the whole packet will be captured on all the MACs. // promiscuous mode (nonzero means promiscuous)1000, // read timeouerrbuf // error buffer)) == NULL){fprintf(stderr,"\nError opening adapter\n");return -1;}}/* Read the packets */while((res = pcap_next_ex( fp, &header, &pkt_data)) >= 0){if(res == 0)/* Timeout elapsed */continue;/* print pkt timestamp and pkt len */printf("%ld:%ld (%ld)\n", header->_sec, header->_usec, header->len);/* Print the packet */for (i=1; (i < header->caplen + 1 ) ; i++){printf("%.2x ", pkt_data[i-1]);if ( (i % LINE_LEN) == 0) printf("\n");}printf("\n\n"); }if(res == -1){printf("Error reading the packets: %s\n", pcap_geterr(fp));return -1;}pcap_close(fp);return 0;步骤3:为编译器指定包含文件和库文件搜索目录。
VC++编程实现网络嗅探器中国电波传播研究所青岛分所郎锐引言从事网络安全的技术人员和相当一部分准黑客(指那些使用现成的黑客软件进行攻击而不是根据需要去自己编写代码的人)都一定不会对网络嗅探器(sniffer)感到陌生,网络嗅探器无论是在网络安全还是在黑客攻击方面均扮演了很重要的角色。
通过使用网络嗅探器可以把网卡设置于混杂模式,并可实现对网络上传输的数据包的捕获与分析。
此分析结果可供网络安全分析之用,但如为黑客所利用也可以为其发动进一步的攻击提供有价值的信息。
可见,嗅探器实际是一把双刃剑。
虽然网络嗅探器技术被黑客利用后会对网络安全构成一定的威胁,但嗅探器本身的危害并不是很大,主要是用来为其他黑客软件提供网络情报,真正的攻击主要是由其他黑软来完成的。
而在网络安全方面,网络嗅探手段可以有效地探测在网络上传输的数据包信息,通过对这些信息的分析利用是有助于网络安全维护的。
权衡利弊,有必要对网络嗅探器的实现原理进行介绍。
嗅探器设计原理嗅探器作为一种网络通讯程序,也是通过对网卡的编程来实现网络通讯的,对网卡的编程也是使用通常的套接字(socket)方式来进行。
但是,通常的套接字程序只能响应与自己硬件地址相匹配的或是以广播形式发出的数据帧,对于其他形式的数据帧比如已到达网络接口但却不是发给此地址的数据帧,网络接口在验证投递地址并非自身地址之后将不引起响应,也就是说应用程序无法收取到达的数据包。
而网络嗅探器的目的恰恰在于从网卡接收所有经过它的数据包,这些数据包即可以是发给它的也可以是发往别处的。
显然,要达到此目的就不能再让网卡按通常的正常模式工作,而必须将其设置为混杂模式。
具体到编程实现上,这种对网卡混杂模式的设置是通过原始套接字(raw socket)来实现的,这也有别于通常经常使用的数据流套接字和数据报套接字。
在创建了原始套接字后,需要通过setsockopt()函数来设置IP头操作选项,然后再通过bind()函数将原始套接字绑定到本地网卡。
6.4 网络嗅探器开发实例– 119 – 为了使用方便,下面定义TCPHeader 结构来描述TCP 头。
typedef struct _TCPHeader // 20个字节{ USHORT sourcePort; // 16位源端口号USHORT destinationPort; // 16位目的端口号ULONG sequenceNumber; // 32位序列号ULONG acknowledgeNumber; // 32位确认号UCHAR dataoffset; // 4位首部长度/6位保留字UCHAR flags; // 6位标志位USHORT windows; // 16位窗口大小USHORT checksum; // 16位校验和USHORT urgentPointer; // 16位紧急数据偏移量} TCPHeader, *PTCPHeader;从封包中萃取出TCP 头之后,还可以根据目的端口号进一步分析用户在应用层使用的是什么协议,如果目的端口号为21,则说明使用的是FTP ,为25则说明使用的是SMTP 等。
6.4.2 网络嗅探器的具体实现根据前面的设计思路,不难写出网络嗅探器的实现代码,下面就给出一个简单的示例,该示例在配套光盘的Sniffer 工程下,它可以捕获到所有经过本地网卡的数据包,并可从中分析出协议、IP 源地址、IP 目标地址、TCP 源端口号、TCP 目标端口号等信息。
程序运行效果如图6.7所示。
图6.7 网络嗅探器运行效果下面讲述程序的主要实现代码。
程序运行之后,首先创建原始套接字,将它绑定到一个明确的本地地址(不能为ADDR_ANY ),然后设置SIO_RCV ALL 控制代码,最后进入无限循环,不断调用recv 函数接收经过本地网卡的IP 封包。
这段程序代码如下。
void main(){ // 创建原始套接字SOCKET sRaw = socket(AF_INET, SOCK_RA W , IPPROTO_IP);// 获取本地IP 地址char szHostName[56];。
集美大学计算机工程学院实验报告
课程名称:TCP/IP协议与通信程序设计班级:实验成绩:
实验项目名称:网络嗅探器的编程仿真学号:上机实践日期:2016-06-14实验项目编号:12组号:1上机实践时间:2学时
一、实验目的
了解利用原始套接字进行通信程序的编写,编译和执行。
二、实验内容与设计思想
利用原始套接字编程将网卡设置为混杂模式,对网络上传输的数据包进行捕获与分析,要求析出并显示数据包的发送端IP地址以及接收端的IP地址。
三、实验使用环境
操作系统:Microsoft Windows XP SP2
编程环境:Visual C++ 6.0
四、实验步骤和调试过程
源代码:
#include "initsock.h"
#include "protoinfo.h"
#include <stdio.h>
#include "mstcpip.h"
#pragma comment(lib, "Advapi32.lib")
CInitSock theSock;
//解析tcp数据
void DecodeTCPPacket(char *pData)
{
TCPHeader *pTCPHdr = (TCPHeader *)pData;
printf(" Port: %d -> %d \n", ntohs(pTCPHdr->sourcePort), ntohs(pTCPHdr-
>destinationPort));
// 下面还可以根据目的端口号进一步解析应用层协议
switch(::ntohs(pTCPHdr->destinationPort))
{
case 21:
break;
case 80:
case 8080:
break;
}
}
//解析ip数据
void DecodeIPPacket(char *pData)
{
IPHeader *pIPHdr = (IPHeader*)pData;
in_addr source, dest;
char szSourceIp[32], szDestIp[32];
printf("\n\n-------------------------------\n");
// 从IP头中取出源IP地址和目的IP地址
source.S_un.S_addr = pIPHdr->ipSource;
dest.S_un.S_addr = pIPHdr->ipDestination;
strcpy(szSourceIp, ::inet_ntoa(source));
strcpy(szDestIp, ::inet_ntoa(dest));
printf(" %s -> %s \n", szSourceIp, szDestIp);
// IP头长度
int nHeaderLen = (pIPHdr->iphVerLen & 0xf) * sizeof(ULONG); switch(pIPHdr->ipProtocol)
{
case IPPROTO_TCP: // TCP协议
DecodeTCPPacket(pData + nHeaderLen);
break;
case IPPROTO_UDP:
break;
case IPPROTO_ICMP:
break;
}
}
void main()
{
// 创建原始套节字
SOCKET sRaw = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
// 获取本地IP地址
char szHostName[56];
SOCKADDR_IN addr_in;
struct hostent *pHost;
gethostname(szHostName, 56);
if((pHost = gethostbyname((char*)szHostName)) == NULL)
return ;
// 在调用ioctl之前,套节字必须绑定
addr_in.sin_family = AF_INET;
addr_in.sin_port = htons(0);
//将本地ip复制到addr_in结构体
memcpy(&addr_in.sin_addr.S_un.S_addr, pHost->h_addr_list[0], pHost-
>h_length);
//ip转换为字符串输出
printf(" Binding to interface : %s \n", ::inet_ntoa(addr_in.sin_addr));
if(bind(sRaw, (PSOCKADDR)&addr_in, sizeof(addr_in)) == SOCKET_ERROR){} //return;
// 设置SIO_RCVALL控制代码,以便接收所有的IP包
DWORD dwValue = 1;
//设置原始套接字能接收所有数据
if(ioctlsocket(sRaw, SIO_RCVALL, &dwValue) != 0){}
// return ;
// 开始接收封包
char buff[1024];
int nRet;
while(TRUE)
{
nRet = recv(sRaw, buff, 1024, 0);
if(nRet > 0)
{
DecodeIPPacket(buff);
}
}
closesocket(sRaw);
}
执行结果:
查看本地的ip
五、实验小结
1.为了使网卡接收所有经过它的封包,要将网卡设置为混杂模式,具体是在创建原始套
接字后,将它绑定到一个明确的本地地址,然后向套接字发送SIO_RCVALL控制命令,这样网卡就被设置为混杂模式。
2.可以捕获到局域网中发送的数据包的发送端IP地址以及接收端的IP地址
六、附录
《网络编程技术与应用》。