精华内容
下载资源
问答
  • C++基于WinPcap抓UDP包并解析内容,VS2013环境,宽字节
  • 到的UDP包内的源端口和目标端口, 都不是固定的,头疼啊。
  • 这个压缩包里面一共有两个工具,,一个是用于抓包分析报文的。。还有一个用于建立TCP UDP连接,发送报文的,可以用来调试自己写的网络程序。
  • C#TCP UDP抓包 winform源码
  • Wireshark抓包udp

    2021-06-08 16:53:25
    UDP新手自学笔记(附带简单wireshark抓包
    展开全文
  • 可以说是最小的抓包工具,只有100k左右,麻雀虽小五脏俱全,可以设置过滤器,tcp、udp请求应答一目了然
  • UDP抓包工具

    2018-11-16 13:35:11
    很好用的组播抓包工具,简单易懂,轻松上手,很方便。
  • tcp/udp抓包工具

    2013-12-31 11:41:41
    tcp/udp抓包工具
  • UDP抓包软件,可以任意端口

    热门讨论 2010-06-23 16:41:44
    UDP抓包软件,可以任意端口。非常好用。
  • 网络抓包工具 tcp ip udp 等等
  • c++实现对capTCP、UDP包文件的解析,可以用windump包后直接解析。通过循环解析出cap文件中每个包的IP头的各部分含义、TCP/UDP头的含义。这些部分都储存在结构体中,如果需要统计,读者可自行编写统计规则。由于...
  • UDP协议抓包分析

    万次阅读 多人点赞 2019-05-22 17:10:25
    一、什么是UDP UDP就是一种无连接的协议。该协议用来支撑那些需要在计算机之间传输数据的网络应用,包括网络视频会议系统在内的众多客户/服务器模式的应用。 二、UDP协议的特点 UDP使用底层的互联网协议来传送报文,...

    一、什么是UDP
    UDP就是一种无连接的协议。该协议用来支撑那些需要在计算机之间传输数据的网络应用,包括网络视频会议系统在内的众多客户/服务器模式的应用。
    二、UDP协议的特点
    UDP使用底层的互联网协议来传送报文,同IP一样提供不可靠的无连接传输服务。他也不提供报文到达确认、排序及流量控制等功能。
    (1)UDP是一个无连接协议,也就是传输数据之前源端口和目标端口不能建立连接。当它想传输时,就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传输数据的速度仅仅是受应用程序生成数据的速度,,计算机的能力和传输带宽的限制。在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。
    (2)由于传输数据不建立连接,因此也就不需要维护连接状态。因此,一台服务器可能同时向多个客户机传输相同的信息。
    (3)UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很少。
    (4)吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和目标端主机性能的限制。
    (5)UDP使用尽最大努力交付,既不保证可靠交付,因此主机不需要维持复杂的链接状态表
    (6)UDP是面向报文的。发送方的UDP对应用程序传输下来的报文,添加首部后就想下传送给IP层。既不拆分,也不合并,而是保留这些报文的边界。因此,应用程序需要选择合适的报文大小。
    三、捕获ARP协议包
    实验环境
    PC:物理机WIN10(IP:10.175.139.213)[在此启动wireshark]
    使用捕获过滤器
    根据实验环境选择捕获选项
    在这里插入图片描述
    进入如下界面,当前没有捕获到任何包。因为这里使用了捕获过滤器,仅捕获UDP包
    在这里插入图片描述
    在PC上执行QQ程序,这时候只需要简单地登陆一下,将会捕获到大量的UDP数据包;
    在wireshark中查看抓包记录
    在这里插入图片描述
    其中,我们会看到许多QICQ协议,这里的QICQ协议表示是运行的QQ程序;
    在分析UDP数据包之前我们先介绍一下格式,以清楚地理解每个包
    UDP数据报首部格式如下:
    在这里插入图片描述
    源端口:用来传输数据包的端口
    目标端口:数据包将要被传输到的端口
    数据报长度:数据报的字节长度
    校验和:用来确保UDP首部和数据到达时的完整性
    数据:被UDP封装进去的数据,包含应用层协议头部和用户发出的数据

    查看捕获的UDP数据包。可以看到共有五行详细信息。其中,第四行信息是UDP协议的详细信息。
    在这里插入图片描述
    其中,以下内容表示这是第1570帧数据报的详细信息。其中包的大小为712个字节
    在这里插入图片描述
    以下内容表示以太网帧头部信息。其中源MAC地址为52:ce:c2:12:8b:ef,目标MAC地址为94:db:da:3e:8f:cf。
    在这里插入图片描述
    以下信息是IPV4首部信息。其中源IP地址为10.175.139.213,目标IP地址为123.151.78.110。
    在这里插入图片描述
    以下信息是表示传输层的数据报首部信息,此处是UDP协议。其中源端口号为56429,目标端口为。以下为对该部分内容展开介绍。
    在这里插入图片描述
    以下信息是被UDP封装进去的数据,其大小为47bytes
    在这里插入图片描述
    关于以上UDP首部格式,我们可以构造出下表:
    在这里插入图片描述

    嗯嗯~~就酱紫!!!

    展开全文
  • 网络抓包工具tcp、udp

    2020-11-26 14:03:57
    网络抓包工具,免安装,体积小,可以抓取tcp、udp、http协议 网络抓包工具,免安装,体积小,可以抓取tcp、udp、http协议 网络抓包工具,免安装,体积小,可以抓取tcp、udp、http协议
  • 我将DSP与电脑用网线连接,DSP端向电脑以UDP协议向发送数据。电脑上用wireshark 可以UDP包,但接收端口就是收不到UDP数据。请问这是怎么回事?
  • 简易把TCP UDP抓包工具

    2018-07-07 10:12:03
    MiniSniffer一个小巧的网络抓包工具(嗅探器),可以捕获各种程序开启的网络连接进行拦截数据功能,让您更方便的知道软件的数据传输流程。
  • UDP抓包分析和存盘.rar

    2020-11-02 16:16:18
    源代码是基于WINPCAP的UDP抓包分析和存盘的代码,代码注释清晰,可以在这个代码基础上轻松实现正对网卡的具体IP地址或端口的UDP,TCP,DNS,ICMP,ARP,广播等协议的抓包分析以及存盘等操作
  • tcpkit 是一款 tcp/udp 抓包/分析工具
  • tcp udp网络抓包

    2011-01-11 20:34:46
    实现网络抓包功能,并分析其中的TCP,UDP,和http协议内容。
  • 最近使用winpcap在win7下编写网络抓包程序,记录一下。 winpcap是比较老的网络抓包库,在win7和win10上依赖都不是很好,看网上有针对的win10版本的winpcap安装包,这里分享了win10下的winpcap安装包和编译好的库以及...

    最近使用winpcap在win7下编写网络抓包程序,记录一下。

    winpcap是比较老的网络抓包库,在win7和win10上依赖都不是很好,看网上有针对的win10版本的winpcap安装包,这里分享了win10下的winpcap安装包和编译好的库以及winpcap的源程序,连接如下win10pcap安装包
    关于win10下重新编译wpcap可参考另外一篇,主要记录了遇到的问题win7编译wpcap

    言归正传,本文目的是为了记录下如何提高winpcap的抓包效率,先描述下问题。
    问题描述:在PC端使用winpcap编写抓UDP包程序,千兆网卡,另一端是FPGA编写的数据发送端,带宽可达到800M/s,安装官方给的用例实现,存在以下问题。

    • 数据发送失败
    • 丢包非常严重

    1、数据发送失败
    使用winpcap编写的发送UDP数据的功能,在本地使用wireshark可以抓到包,但在另一端无法收到,wireshark也抓不到,分析的原因是数据包没有送出网卡,无论调用pcap_sendpacket函数还是pcap_sendqueue_transmit都发送不成功,最终将winpcap替换为Npcap,发送数据成功。有次看来还是winpcap的驱动在win7或者win10上依然存在bug。关于Npcap的详细信息可以查看官网Npcap,其实就是优化后的winpcap。
    关于组UDP包的代码

    //以太网数据头结构如下
    #define ETHER_ADDR_LEN 6
    typedef struct ether_header{
    	u_char ether_dhost[ETHER_ADDR_LEN];
    	u_char ether_shost[ETHER_ADDR_LEN];
    	u_short ether_type;	//如果上一层为IP协议。则ether_type的值就是0x0800
    }ether_header;
    /* 4字节的IP地址 */
    typedef struct ip_address{
    	u_char byte1;
    	u_char byte2;
    	u_char byte3;
    	u_char byte4;
    }ip_address;
    
    /* IPv4 首部 */
    typedef struct ip_header{
    	unsigned   char		ihl : 4;				//ip   header   length    
    	unsigned   char		version : 4;			//version   
    	u_char  tos;            // 服务类型(Type of service) 
    	u_short tot_len;           // 总长(Total length) 
    	u_short id;				// 标识(Identification)
    	u_short flag_off;       // 标志位(Flags) (3 bits) + 段偏移量(Fragment offset) (13 bits)
    	u_char  ttl;            // 存活时间(Time to live)
    	u_char  protocol;          // 协议(Protocol)
    	u_short check;            // 首部校验和(Header checksum)
    	in_addr  saddr;      // 源地址(Source address)
    	in_addr  daddr;      // 目的地址(Destination address)
    //	u_int   op_pad;         // 选项与填充(Option + Padding)
    }ip_header;
    
    /* UDP 首部*/
    typedef struct udp_header{
    	u_short sport;          // 源端口(Source port)
    	u_short dport;          // 目的端口(Destination port)
    	u_short len;            // UDP数据包长度(Datagram length)
    	u_short crc;            // 校验和(Checksum)
    }udp_header;
    struct Psd_Header {
    	ULONG sourceip; //源IP地址
    	ULONG destip; //目的IP地址
    	BYTE mbz; //置空(0)
    	BYTE ptcl; //协议类型
    	USHORT plen; //TCP/UDP数据包的长度(即从TCP/UDP报头算起到数据包结束的长度 单位:字节)
    };
    

    组UDP包的过程

    int  makeframe_udp(u_char*frame, char*data, int datalen)
    	{
    		int UserDataLen = datalen;
    		int TotolLen = UserDataLen+sizeof(ether_header) + sizeof(ip_header) + sizeof(udp_header);
    		char buffer[1024] = { 0 };
    		ether_header* pether_header = (ether_header*)buffer;
    		ip_header* pip_herder = (ip_header*)(buffer + sizeof(ether_header));
    		udp_header* pudp_herder = (udp_header*)(buffer + sizeof(ether_header) + sizeof(ip_header));
    
    		//以太网帧头
    		memcpy(pether_header->ether_dhost, _eheader.ether_dhost, ETHER_ADDR_LEN);
    		memcpy(pether_header->ether_shost, _eheader.ether_shost, ETHER_ADDR_LEN);
    		USHORT TmpType = 8;
    		pether_header->ether_type = TmpType;
    		//IP头
    		pip_herder->ihl = sizeof(ip_header) / 4;
    		pip_herder->version = 4;
    		pip_herder->tos = 0;
    		pip_herder->tot_len = htons(TotolLen - sizeof(ether_header));
    		pip_herder->id = htons(0x370d);//????
    		pip_herder->flag_off = htons(0);
    		pip_herder->ttl = 0x40;
    		pip_herder->protocol = IPPROTO_UDP;
    		pip_herder->check = 0;
    		pip_herder->saddr.S_un.S_addr = inet_addr(_sourceaddress);
    		pip_herder->daddr.S_un.S_addr = inet_addr(_dstaddress);
    		pip_herder->check = in_cksum((u_short*)pip_herder, sizeof(ip_header));
    		
    		//构建UDP数据头;
    		pudp_herder->dport = htons(_ndPort);
    		pudp_herder->sport = htons(_nsPort);
    		pudp_herder->len = htons(UserDataLen + 8);
    		pudp_herder->crc = 0;
    		int headlen = sizeof(ether_header) + sizeof(ip_header) + sizeof(udp_header);
    
    		char buffer2[1024] = { 0 };
    		Psd_Header* psd = (Psd_Header*)buffer2;
    		psd->sourceip = inet_addr(_sourceaddress);
    		psd->destip = inet_addr(_dstaddress);
    		psd->ptcl = IPPROTO_UDP;
    		psd->plen = htons(UserDataLen + 8);
    		psd->mbz = 0;
    		memcpy(buffer2 + sizeof(Psd_Header), (void*)pudp_herder, sizeof(udp_header));
    		memcpy(buffer2 + sizeof(Psd_Header) + sizeof(udp_header), data, UserDataLen);
    		pudp_herder->crc = in_cksum((u_short *)buffer2, UserDataLen + 8 + sizeof(Psd_Header));
    		
    		memcpy(frame, buffer, headlen);
    		memcpy((void*)(frame + headlen), (void*)data, UserDataLen);
    		return TotolLen;
    	}
    

    在这其中需要计算校验和,计算代码

    u_short in_cksum(u_short * addr, int len)
    	{
    		int     nleft = len;
    		u_int sum = 0;
    		u_short *w = addr;
    		u_short answer = 0;
    
    		/*
    		* Our algorithm is simple, using a 32 bit accumulator (sum), we add
    		* sequential 16 bit words to it, and at the end, fold back all the
    		* carry bits from the top 16 bits into the lower 16 bits.
    		*/
    		while (nleft > 1) {
    			sum += *w++;
    			nleft -= 2;
    		}
    		/* mop up an odd byte, if necessary */
    		if (nleft == 1) {
    			*(unsigned char *)(&answer) = *(unsigned char *)w;
    			sum += answer;
    		}
    
    		/* add back carry outs from top 16 bits to low 16 bits */
    		sum = (sum >> 16) + (sum & 0xffff); /* add hi 16 to low 16 */
    		sum += (sum >> 16);     /* add carry */
    		answer = ~sum;     /* truncate to 16 bits */
    		return (answer);
    	}
    

    最终的以太网帧还需要加上CRC校验和,和头部的数据,但是在使用winpcap的发送接口时,这些数据段都不需要添加计算。

    2、提高抓包效率
    npcap的抓包过程包含两级缓存,即内核缓存和用户缓存,内核将网卡接收到的数据拷贝到内核缓存中,wpcap又讲内核缓存中的数据拷贝到用户缓存中,应用层再调用pcap_loop或者pcap_next_ex获取每一包的数据。
    通过分析npcap的抓包过程,由于千兆网下瞬时速度太快,当发送数据较多如1M,PC端总是会出现不同程度的丢包现象,使用wireshark也无法抓到,wireshark和自己写的抓包程序现象一样。
    想过修改源码,但看到源码,实在没有时间细嚼慢咽了,还是通过经验慢慢摸索下吧。

    • 尝试一
      增大两级缓存,内核缓存默认为1M,用户缓存默认为512K,按道理说内核缓存大小为1M,我发送1M的数据,缓存是够的,在使用默认缓存和增大缓存后,现象却不如人意,依然丢了很多包。初步分析该数量级上的数据包,丢包并不是因为缓存不足引起的,可能数据量大的时候需要更大缓存,因为上层处理数据总是比较慢的。但是大的缓存总比小的好,在内存允许的情况下缓存越大越好了。
    • 尝试二
      尝试改变接收方式,使用pcap_next_ex代替回调pcap_loop,总觉得函数的频繁调用是要消耗系统资源的,在接收线程中,只做了数据包个数累计,不做任何费时操作,但是丢包现象依旧。看来也不是这的原因。
    • 尝试三
      网上有人说将pcap_open_live中的接收数据长度设置的小一点(一般都写成65535),这样加快内核存储空间的分配,加快内核对接受数据的处理,猛一听有点道理,尝试一把,黯然神伤!理论上可能会加快,但不足以解决丢包的问题
    • 尝试四
      将pcap_open_live中的timeout设置的尽量小,比如1ms,这样虽然会有一定程度上占用cpu资源,但是对数据包的响应速度会比较快。
    • 尝试五
      还是要分析原理啊,通过各种尝试,初步认为数据丢包发生在内核处理过程,即送网卡取数据的过程慢了,可如何加快内核的处理过程呢,这个npcap并没有提供接口,但是,npcap提供了内核拷贝最小数据设置的接口pcap_setmintocopy,这个接口很关键,默认值是16k,适当的增加这个设置,就会减少内核数据的拷贝次数,换言之就是减少了内核的操作次数,这就变相的加快了内存处理速度,通过增加这个参数,再配合增加两级缓存,丢包的问题终于得到了有效的缓解。当然我说的是缓解,因为千兆网下UPD的数据包,有要求实时性,怎么敢保证一包不丢呢。
    展开全文
  • 网络TCP/UDP抓包工具

    热门讨论 2009-09-03 09:44:50
    好用的网络抓包工具,可以支持TCP,UDP
  • MATLAB(DOS)直接调用wireshark抓包程序和丢解决方法 在利用千兆以太网进行数据通信时需要了解数据的传输过程,而wireshark作为一款比较好用的网络抓包工具 在工作中经常使用。但是使用wireshark的UI界面抓包存在...

    MATLAB(DOS)直接调用wireshark抓包程序和UDP抓包丢包解决方法

    在利用千兆以太网进行数据通信时需要了解数据的传输过程,而wireshark作为一款比较好用的网络抓包工具 在工作中经常使用。但是使用wireshark的UI界面抓包存在一个很大的问题,就是在抓取过程中存在着连续丢包现象,针对这个问题在使用中根据wireshark抓包的原理进行了好多次的测试得到了一些经验能避免丢包现象。
    在使用wireshark抓包时一般存在一下两种方式
    1、 直接使用wireshark的UI界面进行数据的抓包
    直接使用wireshark提供的UI界面进行抓包是比较常用的方式。这种方式能够灵活的设置筛选条件,比如对MAC、IP、协议、端口号、包长等。直接调用UI这种方式虽然方便但是在网络速率较大时存在丢包的现象。
    在这里插入图片描述
    常规的UI抓包方式介绍有很多,这里也不做多介绍了。
    在进行数据筛选时可以通过这样设置
    在这里插入图片描述

    上述是指后即可进行抓包,但是由于UI界面不停的刷新,会消耗较多的内存和计算资源,这样会导致数据的丢包。可以通过设置不进行UI的刷新来避免计算机资源的消耗。设置方式如下:
    在这里插入图片描述

    上面就是UI的基本操作。

    2、 MATLAB直接调用wireshark抓包
    在使用MATLAB调用抓包和使用系统dos抓包方式和使用的函数基本上是一致的。本质上来说MATLAB抓包就是调用DOS抓包。MATLAB抓包代码如下:

    file = fullfile('C:\Users\DELL\Desktop\test_data_labview\data\',fileName);    设置%文件保存路径
    dos(['"C:\ruanjian\Wireshark\dumpcap" -B 100 -i 2 -w' file '.cap  -c' 100000  ' -f "dst port 6016"'] ); 		
    %通过dos调用wireshark抓包程序
    

    利用DOS调用wireshark抓包
    dos调用可以通过CMD命令行令行输入dumpcap –h,可查看所有调用的指令含义

    dumpcap.exe –i 1 –B 10 –c 10000 –w D:\realy_wireshark_data_test1\test_data1.cap –f “dst port 6016%-i 网卡号(可通过dumpcap –D指令查看)
    %-B 缓存区,默认是2M,单位为M。这个设置最好根据抓的包大小进行设置合适的包长度。
    %-c 数据包长度
    %-w 保存的文件位置,名称和后缀
    %-f 过滤条件设置
    

    3、 wireshark抓包的筛选条件语句
    列举常用的过滤条件
    抓包过滤操作:

    过滤IP:
    IP源地址:ip.src ==192.168.1.1
    IP目的地址:ip.dst== 192.168.1.1
    IP地址(包括源和目的):ip.addr== 192.168.1.1
    过滤端口:
    TCP端口:tcp.port==80
    TCP目的端口:tcp.dstport == 80
    TCP源端口:tcp.srcport == 80
    UDP端口:udp.port eq 15000
    TCP 1-80之间的端口:tcp.port >= 1 and tcp.port <= 80
    过滤协议:
    http、tcp、udp、arp、icmp、http、smtp、ftp、dns 等。
    过滤MAC地址:
    源MAC地址:eth.src==A0:00:00:04:C5:84
    目的MAC地址:eth.dst==A0:00:00:04:C5:84
    MAC地址(包括源和目的):eth.addr==A0:00:00:04:C5:84
    

    最后:wireshark抓包存在着丢包现象,为了避免这种现象可以通过dos进行抓包或者换一台性能比较高的电脑进行抓包操作。如果存在偶尔丢包,先看看电脑再怀疑自己的代码。

    展开全文
  • 文档中有详细的关于TCP,UDP抓包的分析,带有截图!
  • UDP网络抓包专用测试数据。
  • UDP协议抓包分析(推荐)

    千次阅读 2020-06-25 18:17:08
    UDP协议包分析 5.1 问题 1)使用eNSP搭建实验环境,在交换机E0/0/2口开启包,使用PC1的UDP发包工具 2)包查看UDP的封装格式 5.2 方案 使用eNSP搭建实验环境,如图-18...2)UDP包,如图-20所示。 图-20 ...
  • 使用tcpdump的一个udp包

    万次阅读 2018-03-18 20:01:42
    我打开两个窗口,一个执行tcpdump的抓包命令,一个用于ping www.baidu.com如上图所示1 中【4】表示ipv4版本,【5】表示ip的长度,故而可以计算出IP的首长度4*5=20,它的位置从4500到7272(7272 7272两个...
  • wireshark抓包分析UDP

    千次阅读 2020-06-27 12:10:53
    1、什么是UDP? 传输层有两个协议,之前讨论过的TCP协议和现在要说的UDP协议。二者互为补充,UDP是无连接的协议,它无需经过繁琐的握手就能建立连接并且发送已封装的IP数据包,它能做的事情很少。而面向连接的TCP...
  • UDP协议传输抓包详解

    千次阅读 2019-08-22 09:10:28
    UDP协议视频传输 TCP/IP协议族是一组不同的协议组合在一起构成的协议族,尽管通常称该协议族为TCP/IP,但TCP和IP只是其中的两种协议而已(该协议族的另一个名字是Internet协议族(Internet Protocol Suite))。 TCP...
  • 问题描述:两个不同的应用程序,分别运行在linux服务器A,linux服务器B,跨网段进行udp数据传输,中间经过一种网闸设备(一种安防行业的跨网段的网络设备),服务器A发送数据,服务器B接收数据,服务器B抓包有数据,...
  • Libpcap TCP UDP 抓包

    千次阅读 2014-01-20 16:23:14
    这个官方程序是比较好用的,实现了UDP,TCP的抓包。学习下~ #define APP_NAME "sniffex" #define APP_DESC "Sniffer example using libpcap" #define APP_COPYRIGHT "Copyright (c) 2005 The Tcpdump Group" #...
  • 好用的抓包工具。tcp udp http 等各种协议都能

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,260
精华内容 10,104
关键字:

怎么抓udp的包