Linux系统下Sniffer的实现
- 格式:doc
- 大小:326.00 KB
- 文档页数:32
sniffer 实验报告Sniffer实验报告引言:在当今数字化时代,网络安全问题备受关注。
Sniffer作为一种网络安全工具,被广泛应用于网络流量监测、数据包分析和安全漏洞发现等领域。
本报告旨在介绍Sniffer的原理、应用以及实验结果,并探讨其在网络安全中的重要性。
一、Sniffer的原理与工作方式Sniffer是一种网络数据包嗅探器,它能够截获经过网络的数据包,并对其进行分析和解码。
其工作原理主要包括以下几个步骤:1. 网络接口监听:Sniffer通过监听网络接口,获取经过该接口的数据包。
这可以通过底层网络协议(如以太网、无线网络等)提供的API实现。
2. 数据包截获:一旦Sniffer监听到网络接口上的数据包,它会将其截获并保存在内存或磁盘中,以便后续分析。
3. 数据包解析:Sniffer对截获的数据包进行解析,提取其中的关键信息,如源IP地址、目标IP地址、协议类型、端口号等。
这些信息可以帮助分析人员了解网络流量的来源、目的和内容。
4. 数据包分析:通过对解析得到的数据包进行深入分析,Sniffer可以检测网络中的异常行为、安全漏洞以及潜在的攻击。
二、Sniffer的应用领域Sniffer作为一种功能强大的网络安全工具,在各个领域都有广泛的应用。
以下是几个典型的应用场景:1. 网络管理与监控:Sniffer可以用于监测网络流量,分析网络性能和带宽利用情况。
通过对数据包的分析,可以及时发现网络故障和异常,提高网络管理的效率。
2. 安全漏洞发现:Sniffer可以检测网络中的异常流量和未经授权的访问行为,帮助发现系统的安全漏洞。
它可以捕获潜在的攻击数据包,并通过分析判断是否存在安全威胁。
3. 网络流量分析:Sniffer可以对网络流量进行深入分析,了解用户的行为习惯、访问偏好以及网络应用的使用情况。
这对于网络服务提供商和广告商来说,有助于优化服务和精准投放广告。
4. 数据包调试与故障排查:在网络通信过程中,数据包传输可能会出现错误或丢失。
ble sniffer抓包原理摘要:1.抓包工具简介2.ble sniffer工作原理3.使用ble sniffer进行抓包的步骤4.抓包实例分析5.注意事项与技巧正文:随着物联网技术的发展,蓝牙(Bluetooth)已成为日常生活中不可或缺的无线通信手段。
在这个过程中,ble sniffer这类抓包工具应运而生,帮助我们更好地理解和分析蓝牙通信的细节。
本文将详细介绍ble sniffer的抓包原理、使用方法以及实际应用案例。
1.抓包工具简介抓包工具主要用于捕捉网络数据包,从而分析网络通信的详细信息。
在众多抓包工具中,ble sniffer是一款针对蓝牙(BLE)协议的抓包工具,适用于Windows、Linux和MacOS等操作系统。
它可以帮助开发者分析蓝牙设备的通信状态、数据包内容等信息,为优化蓝牙应用提供有力支持。
2.ble sniffer工作原理ble sniffer的工作原理主要是通过捕获蓝牙设备之间传输的数据包,解析数据包内容,从而获取通信双方的信息。
它依赖于操作系统提供的蓝牙设备驱动程序和底层蓝牙协议栈,实现对蓝牙数据的监听和捕获。
在捕获到数据包后,ble sniffer会显示数据包的详细信息,如源地址、目的地址、数据长度等,并允许用户查看和分析数据包内容。
3.使用ble sniffer进行抓包的步骤使用ble sniffer进行抓包分为以下几个步骤:1)安装ble sniffer:根据操作系统选择合适的版本下载并安装。
2)连接蓝牙设备:确保ble sniffer 与要抓包的蓝牙设备处于连接状态。
3)启动ble sniffer:运行ble sniffer软件,等待其自动发现并连接到附近的蓝牙设备。
4)开始抓包:在抓包界面设置过滤规则,选择需要捕获的蓝牙设备,点击开始抓包按钮。
5)分析数据包:捕获到的数据包将显示在界面中,可以查看数据包的详细信息,包括地址、协议、数据内容等。
此外,ble sniffer还支持将数据包导出为CSV或XML格式,方便进一步分析。
sniffer工作原理
Sniffer是一种网络数据包捕捉工具,用于监控和分析网络通信的内容。
其工作原理如下:
1. 网络数据包捕获:Sniffer通过在网络接口上设置混杂模式(promiscuous mode),接收并记录通过网络传输的数据包。
在这种模式下,网卡将接收到的所有数据包都传递给操作系统,而不仅仅是针对该网卡的目的地地址或广播地址的数据包。
2. 数据包过滤与捕获:Sniffer会根据用户预定义的规则对接收到的数据包进行过滤处理,只保留满足规则要求的数据包。
这些规则可以是源/目的IP地址、端口号、协议类型等。
3. 数据包解析:Sniffer对捕获到的数据包进行解析,将网络数据包的各个部分进行拆解,并生成能够被阅读和分析的格式。
解析后的数据包可以展示源IP地址、目的IP地址、源端口号、目的端口号、协议类型、数据内容等相关信息。
4. 数据包分析:Sniffer对解析后的数据包进行进一步的分析,包括但不限于检测网络流量、监测网络通信行为、捕获网络攻击等。
通过分析这些信息,可以帮助网络管理员识别安全隐患、优化网络性能、调查网络故障等。
需要注意的是,由于Sniffer在网络上实时监控和捕获数据包,因此在使用过程中需要遵守法律法规,确保合法使用,并保护用户隐私与数据安全。
Sniffer的使用一、实验简介:Sniffer是一个完善的网络监听工具。
使用Sniffer的目的是截获通信的内容,同时能对数据包的内容进行协议分析,使同学们加深对IP协议、TCP协议、UDP 协议和ICMP协议的认识。
二、实验步骤:1、设置Sniffer1.在抓包过滤器窗口中,选择Address选项卡,如图所示。
2.窗口中需要修改两个地方:在Address下拉列表中,选择抓包的类型是IP,在Station1下面输入主机的IP地址;在与之对应的Station2下面输入虚拟机的IP地址.3.设置完毕后,点击该窗口的Advanced选项卡,拖动滚动条找到IP项,将IP和ICMP选中,如下图所示。
4.向下拖动滚动条,将TCP和UDP选中,再把TCP下面的FTP和Telnet两个选项选中,如图所示。
5.这样Sniffer的抓包过滤器就设置完毕了,后面的实验也采用这样的设置。
选择菜单栏Capture下Start菜单项,启动抓包以后,在主机的DOS窗口中Ping虚拟机,如图所示。
6.这样Sniffer的抓包过滤器就设置完毕了,后面的实验也采用这样的设置。
选择菜单栏Capture下Start菜单项,启动抓包以后,在主机的DOS窗口中Ping虚拟机,如图所示。
7.等Ping指令执行完毕后,点击工具栏上的停止并分析按钮,如图所示。
8. 在出现的窗口选择Decode选项卡,可以看到数据包在两台计算机间的传递过程,如图所示。
2、抓取Ping指令发送的数据包1.按照前面对Sniffer的设置抓取Ping指令发送的数据包,命令执行如图所示。
2. 其实IP报头的所有属性都在报头中显示出来,可以看出实际抓取的数据报和理论上的数据报一致,分析如图所示。
3、抓取TCP数据包1.启动Sniffer,然后在主机的DOS命令行下利用FTP指令连接目标主机上的FTP服务器,连接过程如图所示。
2.登录FTP的过程是一次典型的TCP连接,因为FTP服务使用的是TCP协议。
sniffer 教程
Sniffer是一个网络流量分析工具,用于截获和分析网络数据包。
它可以用于网络管理、网络安全监测、漏洞分析等目的。
下面是一些关于使用Sniffer的基本教程:
1. 安装Sniffer软件:首先,您需要从Sniffer官方网站或其他可靠的软件下载站点下载并安装Sniffer软件。
安装过程通常与常规软件安装类似,您只需按照安装向导的指示进行操作。
2. 启动Sniffer:安装完成后,在您的计算机上找到Sniffer 的快捷方式或应用程序图标,双击打开Sniffer。
3. 设置网络接口:在Sniffer界面上,您需要选择要监测的网络接口。
通常,您可以选择您的计算机上的网络接口(如以太网、Wi-Fi等)。
选择要监测的网络接口后,单击“开始”或类似的按钮以开始捕获网络数据包。
4. 监测网络流量:一旦Sniffer开始捕获网络数据包,它将显示经过所选网络接口的流量。
您可以在Sniffer界面上查
看捕获的数据包,并从中提取关键信息,如源地址、目的地址、协议类型等。
5. 分析网络流量:Sniffer还提供了一些分析工具,如过滤器、统计数据、图形化界面等,以帮助您分析捕获的网络流量。
您可以使用这些工具来过滤特定类型的数据包,生成统计报告,可视化网络流量数据等。
需要注意的是,使用Sniffer工具需要具备一定的网络知识和技能,以有效地利用捕获的数据包进行分析。
此外,出于安全和合法性的考虑,在使用Sniffer时,请确保遵守相关法律和规定,并仅在授权范围内使用该工具。
sniffer实验报告实验报告:Sniffer实验引言:Sniffer是一种网络工具,用于捕获和分析网络数据包。
它可以帮助我们了解网络通信的细节,并帮助网络管理员识别和解决网络问题。
本实验旨在介绍Sniffer的原理和应用,以及通过实际操作来深入了解其功能和效果。
一、Sniffer的原理和工作机制Sniffer工作在网络的数据链路层,通过监听网络上的数据包来获取信息。
它可以在网络中的一个节点上运行,或者通过集线器、交换机等设备进行监测。
Sniffer通过网卡接口,将数据包拷贝到自己的缓冲区中,然后进行解析和分析。
二、Sniffer的应用领域1. 网络故障排查:Sniffer可以帮助管理员快速定位网络故障的原因,通过捕获数据包并分析其中的错误信息,找到导致网络中断或延迟的问题源。
2. 安全监测:Sniffer可以用于检测网络中的恶意行为,如入侵、数据泄露等。
通过分析数据包的内容和流量模式,管理员可以发现异常活动并采取相应措施。
3. 性能优化:Sniffer可以监测网络的吞吐量、延迟等性能指标,帮助管理员优化网络结构和配置,提高网络的传输效率和响应速度。
4. 协议分析:Sniffer可以解析各种网络协议,包括TCP/IP、HTTP、FTP等,帮助管理员了解网络通信的细节和流程,从而更好地管理和优化网络。
三、实验步骤与结果1. 硬件准备:连接电脑和网络设备,确保网络正常运行。
2. 软件安装:下载并安装Sniffer软件,如Wireshark等。
3. 打开Sniffer软件:选择合适的网卡接口,开始捕获数据包。
4. 分析数据包:通过过滤器设置,选择需要分析的数据包类型,如HTTP请求、FTP传输等。
5. 结果分析:根据捕获的数据包,分析网络通信的细节和问题,并记录相关信息。
6. 故障排查与优化:根据分析结果,定位网络故障的原因,并采取相应措施进行修复和优化。
实验结果显示,Sniffer软件成功捕获了网络中的数据包,并能够准确地分析其中的内容和流量模式。
本科毕业设计(论文)开题报告学院计算机专业网络工程班级09211311 学生姓名学号09211419 班内序号8 指导教师姓名所在单位网络技术研究院职称讲师设计(论文)题目sniffer的研究和基于开源libpcap的sniffer实现一、选题的背景和意义sniffer是一种非常常用的网络工具,在流量分析、网络安全、故障排查、协议分析、局域网测试等众多领域内发挥了重要作用。
当然目前已经有良好的嗅探工具,比如wireshark。
但是面对一些“个性化”的场合,拥有冗长用户说明和庞大功能系统的wireshark并不是我们的首选。
个性化的嗅探器有以下优点:轻量级。
根据自己需要开发的嗅探器不需要像wireshark那样面面俱到,只要针对需求即可,这样我们的嗅探器将变得更为灵巧,同时更加符合需求。
针对性。
比如需要分析的是一种非通用的新型的应用层协议,显然wireshark对这种“个性”的要求无能为力,我们就可以根据现实需求量身定制符合需求的灵巧的嗅探器。
对自身能力的成长有帮助。
摆脱现有sniffer工具的“拐杖”,加深对协议的理解。
现有的sniffer工具功能强大,使使用者在享受方便的同时,对协议字段本身了解不求甚解。
自行编写sniffer有助于作者加深对各类协议的了解,加深对网络和网络协议的理解。
二、研究的基本内容和拟解决的主要问题设计并实现一个基于libpcap的sniffer,主要实现以下三大功能:1)计算当前局域网内包的个数,每秒的字节数等基本局域网状况的参数。
2) 分析ip包,udp包,tcp包,itcmp包等特定的数据包的状况。
3) 对数据包做应用层协议分析,这里用到了基于端口、协议、正则表达式、长度的综合识别方法,并加入了基于流识别的内容。
三、研究方法及措施第一,通过学习了解实现这个嗅探器的功能需要哪些理论知识,这些需要通过阅读libpcap库的API 获取以及相关论文。
第二,要把大问题模块化,分层次分阶段,逐步解决问题。
如何检测Sniffer发布日期: 2000-1-7内容:--------------------------------------------------------------------------------作者:skyfly技术细节L0pht 公司已经说明了,如下:Win9x/NT正常情况下,就是说不在混乱模式,网卡检测是不是广播地址要比较看收到的目的以太网址是否等于ff.ff.ff.ff.ff.ff是则认为是广播地址。
在混乱模式时,网卡检测是不是广播地址只看收到包的目的以太网址的第一个八位组值,是0xff则认为是广播地址。
利用这点细微差别就可以检测出Sniffer.Linux以前就提出过,一些版本内核有这种问题:当混杂模式时,每个包都被传到了操作系统内核以处理。
在处理某些包,只看IP地址而不看以太网头中的源物理地址。
所以:使用一个不存在的目的MAC,正确的目的IP,受影响的内核将会由于是混杂模式而处理它,并将之交给相应系统堆栈处理。
从而实现检测Sniffer总之,只要发一个以太网头中目的地址是ff.00.00.00.00.00的ARP包(l0pht公司是ff.ff.ff.ff.ff.00)就可以检测出Linux和Windows网卡处于混乱状态的计算机.以下是一个Linux下用于检测Linux下Sniffer的程序,很多地方都贴过了,我只改了一句话,这样也可以检测出Windows机器。
:)----------------- Cut here ----------------------/* -----------------------------------------Network Promiscuous Ethernet Detector.Linux 2.0.x / 2.1.x, libc5 & GlibC-----------------------------------------(c) 1998 savage@-----------------------------------------Scan your subnet, and detect promiscuousWindows & linuxes. It really works, not a joke.----------------------------------------- *//** $Id: neped.c,v 1.4 1998/07/20 22:31:52 savage Exp $*/#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define ETH_P_ARP 0x0806#define MAX_PACK_LEN 2000#define ETHER_HEADER_LEN 14#define ARPREQUEST 1#define ARPREPLY 2#define perr(s) fprintf(stderr,s)struct arp_struct{u_char dst_mac[6];u_char src_mac[6];u_short pkt_type;u_short hw_type;u_short pro_type;u_char hw_len;u_char pro_len;u_short arp_op;u_char sender_eth[6];u_char sender_ip[4];u_char target_eth[6];u_char target_ip[4];};union{u_char full_packet[MAX_PACK_LEN]; struct arp_struct arp_pkt;}a;#define full_packet a.full_packet#define arp_pkt a.arp_pktchar *inetaddr ( u_int32_t ip ){struct in_addr in;in.s_addr = ip;return inet_ntoa(in);}char *hwaddr (u_char * s){static char buf[30];sprintf (buf, "%02X:%02X:%02X:%02X:%02X:%02X", s[0], s[1], s[2], s[3], s[4], s[5]);return buf;}voidmain (int argc, char **argv){int rec;int len, from_len, rsflags;struct ifreq if_data;struct sockaddr from;u_int8_t myMAC[6];u_int32_t myIP, myNETMASK, myBROADCAST, ip, dip, sip;if (getuid () != 0){perr ("Y ou must be root to run this program!\n");exit (0);}if (argc != 2){fprintf(stderr,"Usage: %s eth0\n", argv[0]);exit (0);}if ((rec = socket (AF_INET, SOCK_PACKET, htons (ETH_P_ARP))) < 0) {perror("socket");exit (0);}printf ("----------------------------------------------------------\n");strcpy (if_data.ifr_name, argv[1]);if (ioctl (rec, SIOCGIFHWADDR, &if_data) < 0) {perr ("can't get HW addres of my interface!\n");exit(1);}memcpy (myMAC, if_data.ifr_hwaddr.sa_data, 6);printf ("> My HW Addr: %s\n", hwaddr (myMAC));if (ioctl (rec, SIOCGIFADDR, &if_data) < 0) {perr ("can't get IP addres of my interface!\n");exit(1);}memcpy ((void *) &ip, (void *) &if_data.ifr_addr.sa_data + 2, 4);myIP = ntohl (ip);printf ("> My IP Addr: %s\n", inetaddr(ip));if (ioctl (rec, SIOCGIFNETMASK, &if_data) < 0)perr ("can't get NETMASK addres of my interface!\n");memcpy ((void *) &ip, (void *) &if_data.ifr_netmask.sa_data + 2, 4); myNETMASK = ntohl (ip);printf ("> My NETMASK: %s\n", inetaddr(ip));if (ioctl (rec, SIOCGIFBRDADDR, &if_data) < 0)perr ("can't get BROADCAST addres of my interface!\n");memcpy ((void *) &ip, (void *) &if_data.ifr_broadaddr.sa_data + 2, 4); myBROADCAST = ntohl (ip);printf ("> My BROADCAST: %s\n", inetaddr(ip));if ((rsflags = fcntl (rec, F_GETFL)) == -1){perror ("fcntl F_GETFL");exit (1);}if (fcntl (rec, F_SETFL, rsflags | O_NONBLOCK) == -1){perror ("fcntl F_SETFL");exit (1);}printf ("----------------------------------------------------------\n");printf ("> Scanning ....\n");for (dip = (myIP & myNETMASK) + 1; dip < myBROADCAST; dip++) {bzero(full_packet, MAX_PACK_LEN);memcpy (arp_pkt.dst_mac, "\255\255\255\255\255\0", 6); /* ff:ff:ff:ff:ff:00 :) *//* Only change this line! */memcpy (arp_pkt.src_mac, myMAC, 6);arp_pkt.pkt_type = htons( ETH_P_ARP );arp_pkt.hw_type = htons( 0x0001 );arp_pkt.hw_len = 6;arp_pkt.pro_type = htons( 0x0800 );arp_pkt.pro_len = 4;arp_pkt.arp_op = htons (ARPREQUEST);memcpy (arp_pkt.sender_eth, myMAC, 6);ip = htonl (myIP);memcpy (arp_pkt.sender_ip, &ip, 4);memcpy (arp_pkt.target_eth, "\0\0\0\0\0\0", 6);ip = htonl (dip);memcpy (arp_pkt.target_ip, &ip, 4);strcpy(from.sa_data, argv[1]);from.sa_family = 1;if( sendto (rec, full_packet, sizeof (struct arp_struct), 0, &from,sizeof(from)) < 0)perror ("sendto");usleep (50);len = recvfrom (rec, full_packet, MAX_PACK_LEN, 0, &from, &from_len); if (len <= ETHER_HEADER_LEN)continue;memcpy (&ip, arp_pkt.target_ip, 4);memcpy (&sip, arp_pkt.sender_ip, 4);if (ntohs (arp_pkt.arp_op) == ARPREPLY&& ntohl (ip) == myIP&& ( dip - ntohl(sip) >= 0 )&& ( dip - ntohl(sip) <= 2 ) ){printf ("*> Host %s, %s **** Promiscuous mode detected !!!\n",inetaddr (sip),hwaddr (arp_pkt.sender_eth));}}printf ("> End.\n");exit (0);}----------------- Cut here --------------------。
超级网络嗅探器——Sniffer pro 的使用Sniffer软件是NAI公司推出的功能强大的协议分析软件。
实现对网络的监控,更深入地了解网络存在的问题,检测和修复网络故障和安全问题。
Sniffer可以监听到网上传输的所有信息,主要用来接收在网络上传输的信息。
Sniffer可以截获口令、专用信道内的信息、信用卡号、经济数据、E-mail等,还可以用来攻击与自己相临的网络。
Sniffer的功能主要包括如下几方面:捕获网络流量进行详细分析。
利用专家分析系统诊断问题。
实时监控网络活动情况。
监控单个工作站、会话或者网络中任何一部分的网络利用情况和错误统计。
支持主要的LAN、WAN和网络技术。
提供在位和字节水平过滤数据包的能力。
1 Sniffer Pro的启动和设置2 理解Sniffer Pro主要4种功能组件的作用:监视:实时解码并显示网络通信流中的数据。
捕获:抓取网络中传输的数据包并保存在缓冲区或指定的文件中,供以后使用。
分析:利用专家系统分析网络通信中潜在的问题,给出故障症状和诊断报告。
显示:对捕获的数据包进行解码并以统计表或各种图形方式显示在桌面上。
3 学会sniffer工具的基本使用方法,用sniffer捕获报文并进行分析。
环境:windows XP, windows 7,能访问INTERNET。
Sniffer pro主界面在默认情况下,Sniffer将捕获其接入的域中流经的所有数据包,但在某些场景下,有些数据包可能不是我们所需要的,为了快速定位网络问题所在,有必要对所要捕获的数据包作过滤。
Sniffer提供了捕获数据包前的过滤规则的定义,过滤规则包括2、3层地址的定义和几百种协议的定义。
定义过滤规则的做法一般如下:(1) 在主界面选择【Capture】→【Define Filter】。
(2) 在“Define Filter”对话框中选择“Address”选项卡,这是最常用的定义。
其中包括MAC地址、IP地址和IPX地址的定义。
linux下利用PF_PACKET协议族捕包方法先放一段示例程序,这段程序我在RH9和AS4下编译通过,程序功能就是用从2.2内核加入的PF_PACKET协议族来进行底层数据包捕获并显示。
PF_PACKET 协议族是与系统TCP/IP协议栈并行的同级别模块,即从PF_PACKET协议族得到的数据包是没有经过系统TCP/IP协议栈处理的。
而且,通过设置混杂模式,可以很容易的实现sniffer。
#include<errno.h>#include<stdio.h>#include<stdlib.h>#include<string.h>#include<sys/socket.h>#include<fcntl.h>#include<netpacket/packet.h>#include<net/if.h>#include<net/if_arp.h>#include<netinet/in.h>#include<netinet/ip.h>#include<linux/if_ether.h>#include<arpa/inet.h>#include<sys/ioctl.h>#include<unistd.h>#define RED "\E[31m\E[1m"#define GREEN "\E[32m\E[1m"#define YELLOW "\E[33m\E[1m"#define BLUE "\E[34m\E[1m"#define NORMAL "\E[m"int Get_IfaceIndex(int fd, const char* interfaceName){struct ifreq ifr;if (interfaceName == NULL){return -1;}memset(&ifr, 0, sizeof(ifr));strcpy(ifr.ifr_name, interfaceName);if (ioctl(fd, SIOCGIFINDEX, &ifr) == -1){printf("RED ioctl error\n");return -1;}return ifr.ifr_ifindex;}int set_Iface_promisc(int fd, int dev_id){struct packet_mreq mr;memset(&mr,0,sizeof(mr));mr.mr_ifindex = dev_id;mr.mr_type = PACKET_MR_PROMISC;if(setsockopt(fd, SOL_PACKET,PACKET_ADD_MEMBERSHIP,&mr,sizeof(mr))==-1){fprintf(stderr,"GREEN set promisc failed! \n");return -1;}return 0;}void usage(char *exename){fprintf(stderr,RED"%s <interface> <packets num to capture>\n"NORMAL, exename);}int main(int argc, char **argv){int listen_fd;int ipak=0,maxk=0;char buffer[8192];int frmlen;struct sockaddr_ll sll;struct iphdr *ip;if(argc <3){usage(argv[0]);return -1;}listen_fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));sll.sll_family = AF_PACKET;sll.sll_ifindex = Get_IfaceIndex(listen_fd,argv[1]);sll.sll_protocol = htons(ETH_P_ALL);if(bind(listen_fd,(struct sockaddr *)(&sll),sizeof(sll))==-1){fprintf(stderr,YELLOW"bind error:%s !\n"NORMAL,strerror(errno));goto FAIL;}if(set_Iface_promisc(listen_fd,sll.sll_ifindex) == -1){fprintf(stderr,"BLUE set promisc failed !\n");goto FAIL;}maxk = atoi(argv[2]);while(!maxk || ipak < maxk){frmlen = recv(listen_fd,buffer,8192,MSG_TRUNC); //0->flags (MSG_PEEK,MSG_OOB,MSG_WAITALL,MSG_TRUNC)ip = (struct iphdr *)(buffer + sizeof(struct ethhdr));printf("NORMAL IP Packet from: %s\n",inet_ntoa(*(structin_addr*)&ip->saddr));printf("NORMAL --IP Packet To: %s\n",inet_ntoa(*(structin_addr*)&ip->daddr));printf("NORMAL ---IP Protocol: %d\n",(ip->protocol));printf("NORMAL -Buffer Length: %d bytes\n",frmlen);printf("NORMAL buffer Content: %s\n\n",buffer);ipak++;}return 0;FAIL:close(listen_fd);return -1;}解释说明:#include <sys/socket.h>#include <features.h> /* 需要里面的 glibc 版本号 */#if __GLIBC__ >= 2 && __GLIBC_MINOR >= 1#include <netpacket/packet.h>#include <net/ethernet.h> /* 链路层(L2)协议 */#else#include <asm/types.h>#include <linux/if_packet.h>#include <linux/if_ether.h> /* 链路层协议 */#endifpacket_socket=socket(PF_PACKET,intsocket_type,intprotocol);DESCRIPTION 描述分组套接口(也译为插口或套接字)被用于在设备层(OSI 的链路层) 收发原始(raw )分组。
Linux系统下Sniffer的实现论文关键词:嗅探器数据包协议栈以太网论文摘要:Sniffer是一种强大的网络分析工具,它集成了很多可以有力解决网络问题的功能。
Sniffer可以实时地列出流经多个网卡(包括Modem,ISDN,ADSL)的数据包,它还支持基于某些应用的数据包捕捉。
通过它,你可以获得你所感兴趣的某个应用的所有网络流量。
今天,Sniffer成为了网络监控器和网络分析器的专用名词,它通常还代表收集数据和信息的方法。
ISS把它这样定义:Sniffer是一种利用自身网络接口来对目的地是其它计算机的数据包进行捕捉的一种工具。
本文介绍并研究了Sniffer相关技术,重点是在Linux系统下如何实现Sniffer并获得相关数据包,并且详细介绍了Linux环境下Sniffer的实现过程。
通过阅读本论文,您会对Sniffer有大致的了解,还可以得知如何在Linux系统环境下实现一个Sniffer的详细过程。
同时,本文还简略介绍TCP/IP协议栈和Sniffer实现过程的关系,详尽分析了TCP/IP中各个层次。
第一章 Sniffer简介1.1 什么是Sniffer ?Sniffer又叫“嗅探器”,是一种威胁性极大的被动攻击工具。
使用这种工具,可以监视网络的状态、数据流动情况以及网络上传输的信息。
当信息以明文的形式在网络上传输时,便可以使用网络监听的方式来进行攻击。
黑客们常常利用它来截获用户私人信息,网络管理员也常常用它来监视网络状态,分析网络流量,排除网络故障等。
Sniffer分为软件和硬件两种,软件的Sniffer有 NetXray、Packetboy、Net monitor等,其优点是物美价廉,易于学习使用,同时也易于交流;缺点是无法抓取网络上所有的传输,某些情况下也就无法真正了解网络的故障和运行情况。
硬件的Sniffer通常称为协议分析仪,一般都是商业性的,价格也比较贵。
ISS ( Int ernetS ecurityS ystem)为Sniffer这样定义:Sniffer是利用计算机的网络接口截获目的地为其他计算机的数据报文的一种工具。
我们一般认为Sniffer是指在运行以太网协议、TCP/ IP协议、IPX协议或者其他协议的网络上,可以攫取网络信息流的软件或硬件。
Sniffer早期主要是分析网络的流量,以便找出所关心的网络中潜在的问题。
Sniffer的存在对网络系统管理员是至关重要的,网络系统管理员通过Sniffer可以诊断出大量的不可见模糊问题(如网络瓶颈、错误配置等),监视网络活动,完善网络安全策略,进行行之有效的网络管理。
众所都知,在以太网中,所有的通讯都是广播的,也就是说通常在同一个网段的所有网络接口都可以访问在物理媒体上传输的所有数据,在正常的情况下,一个网络接口应该只响应单播和广播两种数据帧。
对于网卡,一般都具备“正常模式”和“混杂模式”两种模式。
网卡在“混杂模式”下可以接收非本地址的数据帧。
所以,简单说来,Sniffer就是在网卡处于“混杂模式”下,捕捉流经本网卡的所有数据包,并根据接收到的数据包,来进行一些应用,例如流量控制等。
1.2 Sniffer的应用在内部网上,黑客要想迅速获得大量的账号(包括用户名和密码),最为有效的手段是使用 "sniffer" 程序。
这种方法要求运行Sniffer 程序的主机和被监听的主机必须在同一个以太网段上,并且要求要以root用户登陆,运行成功,就能够监听到本以太网段上的数据流。
黑客会使用各种方法,获得系统的控制权并留下再次侵入的后门,以保证sniffer能够执行。
大多数 "ethernet sniffer"程序在后台运行,将结果输出到硬盘存储上的某个记录文件中。
Internet是由众多的局域网所组成,这些局域网一般是以太网、令牌网的结构。
数据在这些网络上是以很小的称为帧(Frame)的单位传输的,帧通过特定的网络驱动程序进行成型,然后通过网卡发送到网线上。
由于以太网等很多网络(常见共享HUB连接的内部网)是基于总线方式,物理上是广播的,同一物理网段的所有主机的网卡都能接收到这些以太网帧。
当网络接口处于正常状态时,网卡收到传输来的数据帧,网卡内的芯片程序先接收数据头的目的MAC地址,根据计算机上的网卡驱动程序设置的接收模式判断该不该接收,如果认为是目的地址为本机地址的数据帧或是广播帧,则接收并在接收后产生中断信号通知CPU,否则就丢弃不管,CPU得到中断信号产生中断,操作系统就根据网卡驱动程序中设置的网卡中断程序地址调用驱动程序接收数据,驱动程序接收数据后放入信号堆栈让操作系统处理。
通过修改网卡存在一种特殊的工作模式,在这种工作模式下,网卡不对目的地址进行判断,而直接将它收到的所有报文都传递给操作系统进行处理。
这种特殊的工作模式,称之为混杂模式(Promiscuous Mode).Sniffer就是通过将网卡设置为混杂模式,它对遇到的每一个帧都产生一个硬件中断以便提醒操作系统处理流经该物理媒体上的每一个报文包。
Sniffer工作在网络环境中的底层,它会拦截所有的正在网络上传送的数据,并且通过相应的软件处理,可以实时分析这些数据的内容,进而分析所处的网络状态和整体布局。
另外,Sniffer一个更重要的作用就是进行网络监控。
Sniffer通过捕捉流经本主机的所有数据包,然后对这些捕捉的数据包进行上层分析,进而得出关于网络流量等信息,为网络管理员做出某些决策提供证据。
一般用户管理员会在服务器上运行一个Sniffer,通过捕捉数据包,然后进行详尽分析,就可以得到一些信息,例如,哪些主机在和服务器网络通信,这些主机分别在服务器上做了哪些操作。
得到这些信息后,系统管理员就可以做一些决策,使得本服务器更加安全。
一般来说,snifer可以截获的不仅仅是用户的ID和口令,它还可以截获敏感的经济数据(如信用卡号)、秘密的信息(E—mail)和专有信息。
基于入侵者可利用的资源,一个Sniffer可能截获网络上所有的信息。
从sniffer上可以得到所有的信息,只要你有足够的存储空间。
近年来.sniffer技术出现了新的重要特征。
传统的sniffer技术是被动地监听网络通信、用户名和口令。
新的snifer技术出现了主动地控制通信数据的特点.把sniffer 技术扩展到了一个新的领域。
sniffer既可以作为网络故障的诊断工具,也可以作为黑客嗅探和监听的工具。
sniffer技术除了目前在传统的网络侦测管理外,也开始被应用在资讯保全的领域。
可以这样说,snifer技术是一把双刃剑,如何更好地利用它,了解它的一些特性,这将为我们带来便利。
目前Sniffer工具的应用一般分为以下几个方面:1. 分布式Sniffer系统(Sniffer Distributed): 分布式的Sniffer系统适用于管理大型企业网络或远距离的由多个网络段组成的网络。
它由一个或数个中心控制台以及多个Sniffer服务器组成,每个Sniffer服务器可以放在一个网络段中,自动监视网络情况。
每个Sniffer服务器都具有一个IP地址,可以和中心控制台通信,服务器根据中心控制台的命令实时监视分析网络,并将分析结果返回给中心控制台分布式系统,通过中央控制平台和分布全网的网络分析(Distributed Sniffer System, DSS)全天候地监控整个网络的运行情况。
2. 远程监测的分布式Sniffer系统(DSS/RMON): 通过结合中央控制平台与分布全网的网络分析器,同步收集RMON2统计数据,全天候地监控整个网络运行情况,主要包括分布式远程监控分析器(DSS/RMON Analysis Software)和分布式远程监控服务器(DSS/RMON Server), DSS/RMON探测器对OSI模型的七层结构均进行分析,直接监控网络状态,并把收集到的数据通过网络送达服务器,管理员则可在远端通过网络连接到服务器实现对网络的远程控制。
3. Web技术: Web技术与网络管理技术相结合,是网络管理发展的新趋势,基于Web 的网络管理系统允许管理员在网络的任何位置,通过Web浏览器访问具有网络管理功能的服务器,进行网络管理;Web浏览器对计算机的硬件要求很低管理员依靠简单、廉价的计算平台就能访问具有管理功能的代理服务器。
同样也可以将Web技术和Sniffer技术相结合,为用户提供一个用于管理互联网流量的完整的端到端视图。
4. 在交换环境下Sniffer的使用: 共享连接的局域网是基于总线方式,物理上是广播的,同一物理网段的所有主机的网卡都能接收到这些以太网帧。
交换机(switch)采用交换方式来传输数据,这样一台机器就无法得到与他无关的网络数据了。
为了允许网络管理人员在switch环境下仍让可以得到其他任何一台机器的网络数据,采用了端口镜像技术(Port mirroring)。
交换机就会把所有的网络数据都向该端口复制一份。
这样在该端口上的机器就和以前一样,能够得到任何数据了。
现在大多数switch产品都支持此项技术。
5. 结合人工智能技术: 利用Sniffer“专家分析”技术(Expert Analysis),专家系统能够自动检测诸如拒绝连接、吞吐量降低等多种网络故障征兆,并且及时地阻止其发展成为致命的网络性能问题,并且能够根据当有们狗网络运行状况提出优化方案,以提高网络的运行效率,给出智能管理方案。
同时具有学习与主动发觉网络问题的能力。
当一个网络异常被发现时,立刻正确地指出其原因以便帮助去解决它。
6. Sniffer无线解决方案(Sniffer Wireless网络分析器): Sniffer无线解决方案高效率设计构建起一个精密而安全的无线LAN基础架构。
1.3 常用Sniffer系统简介Sniffer 可分软、硬两种,软件Sniffer有它的优点,价格成本相对较低,易于学习使用,同时也易于交流,缺点是无法抓取网络上所有的传输,比如碎片、fragment, short event 等等,某些情况下也就无法真正了解网络的故障和运行情。
硬件的Sniffer通常称为协议分析仪,一般都比较贵的,商用化的工具产品如美国网络联盟公司的Sniffer网络协议分析仪。
以下是当前比较流行的Sniffer软件。
表1.1 比较流行的Sniffer软件因为Sniffer工具比较多,所以还存在很多其他的Sniffer工具,在此,我们仅详细介绍Ethereal和tcpdump两种常用的Sniffer工具。
Ethereal是一个开放源码的网络分析系统,也是是目前最好的开放源码的网络协议分析器,支持Linux和windows平台。