【个人总结系列-50】应用层协议分析原理与过程-WinPcap-抓包程序
抓包分析解决网络环路的措施

抓包分析解决网络环路的措施随着互联网的发展,网络环路问题逐渐成为网络工程师和管理员们面临的一个重要挑战。
网络环路是指数据在网络中循环传输,导致网络拥堵和性能下降的问题。
解决网络环路问题需要网络工程师具备一定的技术知识和经验。
本文将介绍如何通过抓包分析来解决网络环路问题,帮助读者更好地理解和解决这一难题。
抓包分析是一种常用的网络故障排查方法,通过监视网络数据包的传输过程,分析数据包的头部信息和负载内容,可以帮助网络工程师快速定位网络环路问题的原因。
下面将从抓包分析的基本原理、工具和实际案例等方面进行介绍。
一、抓包分析的基本原理。
抓包分析的基本原理是通过网络抓包工具捕获网络数据包,然后对捕获到的数据包进行解析和分析。
网络数据包是网络通信的基本单位,包括数据包的头部信息和负载内容。
通过分析数据包的源地址、目的地址、协议类型、数据包大小等信息,可以了解网络通信的情况,帮助快速定位网络环路问题。
二、抓包分析的工具。
目前市面上有很多优秀的抓包工具,如Wireshark、tcpdump、Fiddler等,这些工具都可以帮助网络工程师进行抓包分析。
其中,Wireshark是一款功能强大的网络协议分析工具,支持多种网络协议的分析和解码,可以捕获网络数据包并进行详细的分析。
tcpdump是一款基于命令行的抓包工具,可以在Linux和Unix系统上使用,通过简单的命令就可以捕获网络数据包。
Fiddler是一款用于HTTP/HTTPS调试和抓包的工具,可以帮助网络工程师快速定位网络环路问题。
三、抓包分析的实际案例。
下面将通过一个实际案例来介绍如何通过抓包分析来解决网络环路问题。
假设一个公司的内部网络出现了网络环路问题,导致网络拥堵和性能下降。
网络工程师可以通过Wireshark等抓包工具来捕获网络数据包,并进行分析。
首先,网络工程师可以在受影响的网络设备上安装Wireshark,并设置过滤条件,只捕获与网络环路相关的数据包。
WinPcap开发-零基础知识入门基础

WinPcap开发(一):零基础入门*原创作者:追影人0×00 前言网络编程在网络安全方面具有举足轻重的作用,如何快捷高效的监听、分析、构造网络流量,成为很多安全从业者需要解决的重点问题。
而winpcap这一免费开源项目恰好可以为win32应用程序提供访问网络底层的能力,所以其成为了相关网络编程的首选开发工具。
0×01 winpcap是什么?winpcap(windows packet capture)是windows平台下一个免费的网络访问系统,可用于windows系统下的网络编程。
著名的wireshark便是基于winpcap开发的,大家在安装wireshark中可以看到winpcap驱动程序的安装过程。
有关winpcap的介绍网络上很多,百科里面介绍的也很详细,我就不再copy了。
需要注意的一点是,winpcap并不是一个简单的library,而是一个针对Win32平台上的抓包和网络分析的一个架构,它包括一个核心态的包过滤器,一个底层的动态链接库(packet.dll)和一个高层的不依赖于系统的库(wpcap.dll)。
所以它只能“嗅探”到物理线路上的数据包,而不具备拦截的能力,因此不适用于个人防火墙等项目。
0×02 你需要准备些什么?本系列文章主要带大家认识和了解如何利用winpcap网络编程技术进行网络的协议分析、流量统计及网络探测扫描等,这里我们并不会去深硬的解读相关源代码,而是以轻松的方式结合实验来对相关原理进行深入理解。
在本系列文章中,笔者从简到难,简明介绍winpcap架构原理、相关环境搭建及快速编写核心代码。
但是在开始前,读者需要有一些相关基础:了解网络协议相关基础知识,掌握一门winpc ap开发库支持的编程语言,自己能动手实践编写一些例子。
Winpcap提供的开发接口原生是c语言的,不过热心肠的程序猿们已经为其他语言的使用提供了封装,比如java、.net、python,好像连易语言都有。
wireshark抓包分析了解相关协议工作原理

安徽农业大学计算机网络原理课程设计报告题目wireshark抓包分析了解相关协议工作原理姓名学号院系信息与计算机学院专业计算机科学与技术中国·合肥二零一一年12月Wireshark抓包分析了解相关协议工作原理学生:康谦班级:09计算机2班学号:09168168 指导教师:饶元(安徽农业大学信息与计算机学院合肥)摘要:本文首先ping同一网段和ping不同网段间的IP地址,通过分析用wireshark抓到的包,了解ARP地址应用于解析同一局域网内IP地址到硬件地址的映射。
然后考虑访问抓到的包与访问抓到的包之间的区别,分析了访问二者网络之间的不同。
关键字:ping 同一网段不同网段 wireshark 协议域名服务器正文:一、ping隔壁计算机与ping 抓到的包有何不同,为什么?(1)、ping隔壁计算机ARP包:ping包:(2)ing ARP包:Ping包:(3)考虑如何过滤两种ping过程所交互的arp包、ping包;分析抓到的包有何不同。
答:ARP地址是解决同一局域网上的主机或路由器的IP地址和硬件地址的映射问题,如果要找的主机和源主机不在同一个局域网上,就会解析出网关的硬件地址。
二、访问,抓取收发到的数据包,分析整个访问过程。
(1)、访问ARP(网络层):ARP用于解析IP地址与硬件地址的映射,本例中请求的是默认网关的硬件地址。
源主机进程在本局域网上广播发送一个ARP请求分组,询问IP地址为192.168.0.10的硬件地址,IP地址为192.168.0.100所在的主机见到自己的IP 地址,于是发送写有自己硬件地址的ARP响应分组。
并将源主机的IP地址与硬件地址的映射写入自己ARP高速缓存中。
DNS(应用层):DNS用于将域名解析为IP地址,首先源主机发送请求报文询问 的IP地址,DNS服务器210.45.176.18给出的IP地址为210.45.176.3TCP(运输层):TCP协议是面向连接的协议,运输连接用来传送TCP报文,运输连接有三个阶段,即连接建立、数据传送和连接释放。
实践三网络嗅探与协议分析

实践三⽹络嗅探与协议分析⽹络嗅探与协议分析1. 每个⼈找⼀个抓包软件,分析其功能,设计的模块等,着重使⽤和分析,不建议⽤wireshark,编译过程可能⽐较难,也可挑战(1)⾸先我们要清楚抓包的原理。
⽹络数据包捕获的原理:以太⽹(Ethernet)具有共享介质的特征,信息是以明⽂的形式在⽹络上传输,当⽹络适配器设置为监听模式(混杂模式,Promiscuous)时,由于采⽤以太⽹⼴播信道争⽤的⽅式,使得监听系统与正常通信的⽹络能够并联连接,并可以捕获任何⼀个在同⼀冲突域上传输的数据包。
winpcap抓包原理:WinPcap 包括三个部分:NPF(Netgroup Packet Filter)、packet.dll和Wpcap.dll。
packet.dll直接映射了内核的调⽤。
Wpcap.dll提供了更加友好、功能更加强⼤的函数调⽤。
WinPcap的优势是提供了⼀套标准的抓包接⼝,与libpcap兼容,可使得原来许多UNIX平台下的⽹络分析⼯具快速移植过来便于开发各种⽹络分析⼯具,充分考虑了各种性能和效率的优化,包括对于NPF内核层次上的过滤器⽀持,⽀持内核态的统计模式,提供了发送数据包的能⼒。
(2)其次,我们需要清楚经典的ISO/OSI参考模型与TCP/IP模型(3)最后我们来分析我找到的⼀个基于winpcap的抓包⼯具winpcap(windows packet capture)是windows平台下⼀个免费,公共的⽹络访问系统。
我们常⽤的wireshark软件是基于winpcap的,winpcap可直接开发基于⽹络底层协议的应⽤程序。
本程序设计流程1、由于winpcap是基于⽹卡的数据获取,所以先获取正确的⽹卡2、打开选择的⽹卡设备3、启动抓包相关接⼝介绍1、int pcap_findalldevs(pcap_if_t **, char *);//获取所有⽹络设备,保存于pcap_if_t 指向的内存空间2、void pcap_freealldevs(pcap_if_t *); // 清空所有⽹络设备3、pcap_t *pcap_open(const char *source, // 获取的设备名int snaplen, //要捕捉的数据包的部分int flags, // 模式int read_timeout,// 超时时间struct pcap_rmtauth *auth, // 远程机器验证char *errbuf);// 错误缓冲池4、void pcap_close(pcap_t *);//关闭设备5、pcap_compile(pCap, &fcode, filter, 1, NetMask)6、pcap_setfilter(pCap, &fcode)// 设置过滤规则7、int pcap_next_ex(// 从interface或离线记录⽂件获取⼀个报⽂pcap_t *,struct pcap_pkthdr **, // 报⽂头,包含mac地址const u_char **);//报⽂内容具体分析⽹卡选择AdapaterSelection.cpp⽂件中OnInitDialog()⽤于选择⽹卡功能的实现m_pDev变量定位获取到的⽹卡名称,如下pcap_if_t* CAdapaterSelection::getDevice(){if(m_pDev == NULL)return NULL;return m_pDev;}HTREEITEM是树中节点的句柄,也就是⼀个DWORD值,在树中唯⼀标识⼀个节点。
抓PPPPAPCHAP包及协议分析基础

抓PPPPAPCHAP包及协议分析基础随着互联网的发展,网络安全问题也日益突出。
PPPPAPCHAP协议是一种常用的网络安全协议,它在PPP协议基础上增加了PEAP(Protected Extensible Authentication Protocol)和CHAP(Challenge Handshake Authentication Protocol)等安全性机制,用于用户认证和数据加密。
本文将从PPPPAPCHAP包的抓取和协议分析两个方面,对其进行详细介绍。
抓取PPPPAPCHAP包为了抓取PPPPAPCHAP包,我们可以使用Wireshark等网络抓包工具。
下面是详细的抓取步骤:1. 打开Wireshark,并选择要进行抓包的网络接口。
2. 设置过滤器,只捕获PPP协议相关的数据包。
可以在菜单栏中选择“Capture”->“Options”,在弹出的窗口中输入过滤器条件“ppp”。
3. 开始抓包,点击“Start”按钮开始进行抓包。
4.进行相应的网络操作,例如进行一次PPPPAPCHAP认证,获取到相应的认证数据包。
PPPPAPCHAP协议是一种复杂的协议体系,涉及到的知识较多。
下面是对相关概念和原理进行基础介绍:1. PPP协议:点对点协议(Point-to-Point Protocol),用于在点对点链接上建立和维护数据链路层的通信。
2. PEAP协议:保护可扩展认证协议(Protected Extensible Authentication Protocol),用于安全地传输EAP(Extensible Authentication Protocol)消息。
3. CHAP协议:挑战-应答式认证协议(Challenge Handshake Authentication Protocol),用于在网络通信中进行用户和服务器之间的身份认证。
4.数据加密:PPPPAPCHAP协议使用PEAP协议对数据进行加密,以确保传输过程中的数据安全性。
ping,触发一连串动作,抓包数据,直观了解网络协议和流程

ping,触发一连串动作,抓包数据,直观了解网络协议和流程01 计算机网络体系结构中的pingping是Windows、Unix、Linux等操作系统提供的一个常用的网络管理命令,用于检查网络的连通性,帮助分析和判定网络故障。
一个ping的请求和响应,串联起多个网络协议,可能途经了多个主机和路由器ping在计算机网络体系结构中归属应用层,越过运输层直接使用IP层的ICMP协议,发送“回送请求”报文给目标主机,接收目标主机返回的“回送回答”报文并显示在源主机上。
ping是把网络协议应用到日常网络管理的典型实例。
计算机网络的体系结构02 ping的执行流程ping命令的执行流程见下图。
正常执行流程可以简要描述为:ping命令接收一个IP地址或一个网络域名,如果是域名会将域名转换为IP地址。
判断被ping的目标主机和源主机是否在一个网络上,如果不在一个网络上,则查找路由表,找到通往目标网络的路由器IP地址或默认网关IP地址。
查找本地主机ARP表中是否有该IP对应的MAC地址;如果没有,则通过广播询问该IP的MAC地址;本网络中的主机、路由器都会接收到该询问报文。
拥有该IP地址的本地设备回复应答报文,将该IP对应的MAC地址发给源主机。
为了减少本地广播,本地主机、三层路由器或路由器会适时更新自己的本地ARP表,保存本地IP地址和MAC地址的对应关系。
知道了下一步报文要发往的MAC地址,ping命令使用ICMP协议封装含有对端MAC地址的IP数据报交给交换机,交换机查找自己的MAC与port端口对应表,将数据包传给对应端口的主机。
下面的流程只画了本机流程,交换机和路由器的流程没有画出,源主机信息发送到交换机之后,交换机和路由器根据IP数据报相关信息再一步一步的向前查找目标主机,源主机只需要等待回送回答报文。
ping命令的执行流程图03 ping命令涉及的网络协议ping是ICMP网际控制报文协议的一个重要应用,因此ping涉及的最重要的一个协议是ICMP。
实验二-使用wireshark分析arp协议

计算机网络实验报告年级:姓名:学号:___________实验日期:_________________________实验名称:实验二:利用Wireshark分析ARP协议一、实验项目名称及实验项目编号ARP协议学习与分析二、课程名称及课程编号计算机网络三、实验目的和要求实验目的:通过本实验使学生:1.学习ARP协议的工作原理以及ARP分组格式;2.学习使用WireShark对ARP协议进行分析。
实验要求:实验结果分析报告名称:实验一 ARP协议实验结果分析_姓名.doc四、实验原理Wireshark介绍Wireshark 是网络包分析工具。
网络包分析工具的主要作用是尝试捕获网络包,并尝试显示包的尽可能详细的情况。
网络包分析工具是一种用来测量有什么东西从网线上进出的测量工具,Wireshark 是最好的开源网络分析软件。
Wireshark的主要应用如下:(1)网络管理员用来解决网络问题(2)网络安全工程师用来检测安全隐患(3)开发人员用来测试协议执行情况(4)用来学习网络协议(5)除了上面提到的,Wireshark还可以用在其它许多场合。
Wireshark的主要特性(1)支持UNIX和Windows平台(2)在接口实时捕捉包(3)能详细显示包的详细协议信息(4)可以打开/保存捕捉的包(5)可以导入导出其他捕捉程序支持的包数据格式(6)可以通过多种方式过滤包(7)多种方式查找包(8)通过过滤以多种色彩显示包(9)创建多种统计分析五、实验内容1.了解数据包分析软件Wireshark的基本情况;2.安装数据包分析软件Wireshark;3.配置分析软件Wireshark;4.对本机网卡抓数据包;5.分析各种数据包。
六、实验方法及步骤1.Wireshark的安装及界面(1)Wireshark的安装(2)Wireshark的界面启动Wireshark之后,主界面如图:主菜单项:主菜单包括以下几个项目:File包括打开、合并捕捉文件,save/保存,Print/打印,Export/导出捕捉文件的全部或部分。
DHCP完整过程详解及Wireshark抓包分析

DHCP完整过程详解及Wireshark抓包分析DHCP,Dynamic Host Configuration Protocol,动态主机配置协议,简单来说就是主机获取IP地址的过程,属于应⽤层协议。
DHCP采⽤UDP的68(客户端)和67(服务器)端⼝进⾏通信。
【过程】DHCP过程主要为DHCP Discover-->DHCP Offer-->DHCP Request-->DHCP Ack四个过程。
通过Wireshark抓取DHCP获取IP过程的数据报⽂。
1、开Wireshark抓包2、PC当前已有IP,使⽤cmd命令释放IP(ipconfig /release),并重新获取IP(ipconfig /renew)3、停⽌抓包,使⽤bootp过滤报⽂。
4、可以看到图中的5个报⽂,其中DHCP Release报⽂为PC释放IP时发出的报⽂。
获取IP时,PC会发送DHCP Discover⼴播报⽂,由于当前PC没有IP,故源IP为0.0.0.0;特别要注意到的是,PC会随机出⼀个Transaction ID,如果之后收到的Offer报⽂中的Transaction ID与PC模拟出的不同,PC会将该Offer报⽂直接丢弃。
DHCP Offer报⽂DHCP Request报⽂DHCP Ack报⽂【模拟服务器发送Offer报⽂的过程及注意事项】1、保证服务器与客户端的连通性2、准备好⼀个Offer报⽂(可编辑)3、使⽤Wireshark抓取客户端发出的Discover报⽂,确定当前客户端随机出的Transaction ID4、更改Offer报⽂中的Transaction ID与Discover报⽂中⼀致5、使⽤发包软件发送Offer报⽂注:Transaction ID【地址租期】DHCP服务器提供的每个IP地址都有相应的租⽤期,在Offer报⽂中的IP Address Lease Time中可以看到。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.1 应用层协议分析 要对应用层协议进行分析,首先必须抓取网络数据包,根据数据包的格式对其进行一层一层的剥离头部信息,最后得到应用层的数据,然后再根据获得的数据进行应用层行为的分析。因此必须对各层的数据包格式特别清楚,并且熟悉怎么编制抓包程序。
1.1.1 抓包程序 在编写抓包程序时,一般借助winpcap或libpcap提供的API对网络数据包进行抓取。winpcap是为windows开发环境提供的库函数,而libpcap则是为Linux开发环境提供的库函数。它们都是一个强大的网络开发库,可以实现许多功能,如获取可用的网络适配器、获取指定适配器信息(比如名称和描述信息)、捕获指定网卡的数据封包、发送数据封包、过滤捕获的包以获取特定包等。两者提供的接口基本一致,只是某些函数名略有不同。在使用前必须将winpcap或libpcap安装在系统上,在使用时必须在工程中加入对应的开发包并在程序中声明。
1. 安装和部署winpcap 由于在Linux下安装和部署libpcap非常简单,将libpcap安装到Linux系统中,在程序编译时加上-l pcap即可。本段主要介绍在windows中安装和使用winpcap,具体的部署过程如下所示: 下载安装winpcap驱动和DLL组件,即一个winpcap的安装程序,和普通安装程序一样,点击下一步进行安装,直至完毕 下载winpcap的开发包(如WpdPack_4_0_2),将其解压缩到某个路径 在工程和程序中加入开发包 在工程中指定WpdPack_4_0_2中的Lib和Include路径 设置编译条件(添加WPCAP和HAVE_REMOTE) 设置连接器的选项(添加wpcap.lib和ws2_32.lib) 包括头文件#include "pcap.h"
2. winpcap的使用: 常用数据结构: pcap_if_t * allAdapters; //适配器列表 –>next获得下一个适配器 pcap_t * adapterHandle;//适配器句柄 struct pcap_pkthdr * packetHeader; const u_char * packetData;
常用函数: 查找系统上所有适配器: if(pcap_findalldevs_ex(PCAP_SRC_IF_STRING,NULL,&allAdapters,errorBuffer)==-1) //获得所有设备信息,存放在allAdapters中 pcap_freealldevs( allAdapters ); //释放适配器列表 打开适配器并获取其句柄: adapterHandle = pcap_open( adapter->name, // name of the adapter 65536, // portion of the packet to capture 65536 guarantees that the whole packet will be captured PCAP_OPENFLAG_PROMISCUOUS, // promiscuous mode 1000, // read timeout - 1 millisecond NULL, // authentication on the remote machine errorBuffer // error buffer ); 发送数据包: if( pcap_sendpacket( adapterHandle, // the adapter handle packet, // the packet u_char packet[20]; //待发送的数据封包 20 // the length of the packet ) != 0 )
1.1.2 数据包格式和分析 其实协议就是为了规定一种大家都遵循的格式,在应用层、传输层、网络层、数据链路层都有自己的协议数据单元(PDU),按照数据包在网络中传输的过程,首先是应用层将实际的数据根据应用层的协议(格式)封装成一个应用层数据包(相当于一个字符串,更确切的是一个字节串),然后向下传,传到传输层,传输层将拿到的串作为自己数据包的数据部分,并在前面加上自己的头部,头部有许多字段,每个字段都有各自的含义,这样就生成了一个新的串,继续向下传。传到了网络层,网络层进行和上面类似的操作,继续传到数据链路层。数据链路层也加上自己的头部,生成一个新的串,并且在串的头部和尾部都做好标记,然后继续向下传。传到了物理层,物理层就直接将收到的串转化成二进制的电信号进行传输。假如传输到最后的目的地(端系统中),首先是物理层收到电信号,将其转化成一串字节,向上传。传到了数据链路层,数据链路层根据之前对串的头部和尾部做好的记号将有用信息提取出来,并根据头部信息提取出数据部分,只将数据部分向上传。传到了网络层,网络层根据网络层的头部信息,提取出数据部分,传给上一层,依次类推。数据在网络中(整个传输过程不包括两个端系统的部分)的传输过程只有3层,即物理层到数据链路层,再到网络层,传输的过程和上面描述的一样。 由于在对包进行分析时都要参考数据包的格式,所以数据包的格式是相当重要的。在抓包时,首先是获得链路层的帧,根据帧头可以获得源mac和目的mac以及上层的协议。一般帧头是14byte,链路层帧的包头结构在程序中的表示如下:
/* 6字节的mac地址 */
typedef struct mac_address { u_char byte1; u_char byte2; u_char byte3; u_char byte4; u_char byte5; u_char byte6; } mac_address;
/* 14字节的ether帧头 */ typedef struct ether_header { mac_address dest_mac; mac_address src_mac; u_short protocal; } ether_header;
根据帧头的长度将指针往后移,然后可以获得IP数据报的头部指针,根据报头信息可以获得源IP、目的IP、上层协议、头部长度、总长度等信息,IP数据报的头部格式如下图所示:
图2.2.2.1 IPV4头部格式 图2.2.2.2 IPV6头部格式 IPV4报文结构在程序中的表示:
/* 4字节的IP地址 */
typedef struct ip_address { u_char byte1; u_char byte2; u_char byte3; u_char byte4; } ip_address; /* IP头部 */ typedef struct ip_header { u_char ver_ihl; // 版本 (4 bits) + 首部长度 (4 bits) u_char tos; // 服务类型(Type of service) u_short tlen; // 总长(Total length) u_short identification; // 标识(Identification) u_short flags_fo; // 标志位(Flags) (3 bits) + 段偏移量(Fragment offset) (13 bits) u_char ttl; // 存活时间(Time to live) u_char proto; // 协议(Protocol) u_short crc; // 首部校验和(Header checksum) ip_address saddr; // 源地址(Source address) ip_address daddr; // 目的地址(Destination address) u_int op_pad; // 选项与填充(Option + Padding) } ip_header;
然后根据报头长度又可以计算出TCP或UDP的头部指针,根据TCP或UDP的头部信息可以获得源端口号和目的端口号等信息,一般TCP的头部长度为20bytes,UDP的头部长度为8bytes,TCP和UDP的报文格式如下所示:
图2.2.2.3 TCP报文格式 图2.2.2.4 UDP报文格式 TCP/UDP包头结构在程序中的表示: /* TCP头部 */
typedef struct tcp_header { u_short srcPort; // 源端口号 16bits u_short destPort; // 目的端口号 16bits u_int seqNum; // 序号 32bits u_int ackNum; // 确认号 32bits u_short headLen_other; // 首部长度+保留未用+其他字段 16bits u_short windowSize; // 窗口大小 16bits u_short checkSum; // 检验和 16bits u_short pointer; // 紧急数据指针 16bits u_int option; // 选项 可选、不定长 } tcp_header;
/* UDP头部 */ typedef struct udp_header { u_short srcPort; // 源端口号 16bits u_short destPort; // 目的端口号 16bits u_short udpLen; // udp长度 16bits u_short checkSum; // 检验和 16bits } udp_header;
最后就是应用层的数据了,根据上层的报文头部信息可以计算出应用层数据的头部指针,同时根据IP数据包的头部信息可以计算出应用层数据的长度,因此就可以通过程序将应用层的数据取出来,应用层又根据不同的协议取出实际有用的数据。应用层协议主要有FTP、HTTP、DNS等。 通过以上对数据包格式的了解,那么就可以很容易对捕获的数据包进行一层一层的解析了,一般捕获的数据包都是取得链路层的帧,然后再根据头部信息一层一层地剥离,具体的程序分析流程如下图所示: