精华内容
下载资源
问答
  • UDP协议传输抓包详解
    千次阅读
    2019-08-22 09:10:28

    UDP协议视频传输
    TCP/IP协议族是一组不同的协议组合在一起构成的协议族,尽管通常称该协议族为TCP/IP,但TCP和IP只是其中的两种协议而已(该协议族的另一个名字是Internet协议族(Internet Protocol Suite))。
    TCP/IP通常被认为是一个四层协议系统,如图1所示:
    图一
    图1
    链路层:有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡,它们一起处理与电缆(或其他任何传输媒介)的物理接口细节
    网络层:有时也称作互联网层,处理分组在网络中的活动,例如分组的选路;在TCP/IP协议族中,网络层协议包括IP协议(网际协议),ICMP协议(Internet互联网控制报文协议),以及IGMP协议(Internet组管理协议)
    运输层:主要为两台主机上的应用程序提供端到端的通信;在TCP/IP协议族中,有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议),而在运输层,我们使用UDP协议。
    UDP则为应用层提供一种非常简单的服务;它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端;任何必需的可靠性必须由应用层来提供;
    应用层:负责处理特定的应用程序细节;
    UDP报文格式
    UDP协议分为首部字段和数据字段,其中首部字段只占用8个字节,分别是个占用两个字节的源端口、目的端口、报文长度和检验和。
    在这里插入图片描述
    图2
    源端口号(2字节): 发送方端口号
    目的端口号(2字节):接收方端口号
    报文长度(2字节): UDP用具数据报的总长度,一字节为单位
    校验和(2字节):检测UDP用户数据报在传输的过程中是否出错,有错就丢弃。
    IP报文格式
    普通的IP首部长20字节,除非含有选项字段。如图3所示:
    在这里插入图片描述
    图3
    传输总过程(发送端)
    下面我们通过具体的代码来了解UDP传输的过程。我们使用代码发送“./file.txt”,并且在Linux下下载tcpdump用来抓包。使用该软件监控8888这个端口后,运行发送数据包的代码。我们可以抓到如下图所示的一段数据包。
    在这里插入图片描述
    图4
    所以接下来我们根据图1、图2、图3和图4来分析一下我们所抓取的UDP数据包。
    应用层:就是应用进程准备发送的原始数据“./file.txt”,对应的数据段是2e/2f/66/69/6c/65/2e/74/78/74
    传输层:该层我们使用的是UDP协议,UDP报文格式如图2所示,占8个字节。对应的数据段是de/ec/22/b8/00/12/d7/fa
    deec:16位端口号:57068
    22b8:16位目的端口号:8888
    0012:udp数据报长度:(由于udp报文长度固定位8,所以知道数据位是18字节)
    d7fa:16位校验和
    网络层:IP数据报的格式如图3所示。占20个字节。对应的数据段是45/00/00/26/b8/42/40/00/40/11/aa/ad/c0/a8/2b/64/c0/a8/2b/22
    4500:4代表ipv4协议,5代表IP首部的长度(代指首部占32bit/4byte的数目),00代表服务类型为一般服务。
    0026:代表总长度(包含包头和数据)是38。
    B842:16位标志
    4000:3位编制家13位片偏移
    4011:40代表生存时间ttl64,11代表协议类型udp(17).
    aaad:代表首部校验和
    C0a82b64:32位源ip地址:192.168.43.100
    c0a82b22:32位目的地址:192.168.43.34
    链路层:这一步主要就是封包了,主要格式就是:以太网封装格式 和 802.x 封装格式了,我们使用的是以太网封装格式。经过以太网封装之后就是我们在以太网上传输的数据帧(bit流)了。
    传输过程(接收端)
    接收端和发送端的顺序刚好相反。即分别经过链路层去掉以太网的头部,经过网络层去掉IP的头部,经过传输层去掉UDP的头部,经过应用层得到数据流。就完成了整个的数据传输过程。
    UDP的特点:
    A、是无连接的。相比于TCP协议,UDP协议在传送数据前不需要建立连接,当然也就没有释放连接。
    B、是尽最大努力交付的。也就是说UDP协议无法保证数据能够准确的交付到目的主机。也不需要对接收到的UDP报文进行确认。
    C、是面向报文的。也就是说UDP协议将应用层传输下来的数据封装在一个UDP包中,不进行拆分或合并。因此,运输层在收到对方的UDP包后,会去掉首部后,将数据原封不动的交给应用进程。
    D、没有拥塞控制。因此UDP协议的发送速率不送网络的拥塞度影响。
    E、UDP支持一对一、一对多、多对一和多对多的交互通信。
    F、UDP的头部占用较小,只占用8个字节。
    基于UDP的例子
    直播:直播对实时性的要求比较高,宁可丢包,也不要卡顿的,所以很多直播应用都基于 UDP 实现了自己的视频传输协议
    实时游戏:游戏的特点也是实时性比较高,在这种情况下,采用自定义的可靠的 UDP 协议,自定义重传策略,能够把产生的延迟降到最低,减少网络问题对游戏造成的影响
    物联网:一方面,物联网领域中资源少,很可能就是个很小的嵌入式系统,而维护 TCP 协议的代价太大了;另一方面,物联网对实时性的要求也特别高。比如 Google 旗下的 Nest 简历 Thread Group,推出了物联网通信协议 Thread,就是基于 UDP 协议的
    总的来说,对于实时性要求较高而且可以容忍部分丢包的视频类传输,可以采用UDP传输协议。

    更多相关内容
  • 进行通信,使用Wireshark抓包软件抓取发送的包并分析数据结构,由于涉及到客户端和通信端,可以使用两台电脑,一台电脑编写客户端代码,一台电脑编写服务器端代码,也可以在一台电脑上开两个 VS2019同时编译两个端,...
  • Wireshark数据抓包分析UDP协议

    千次阅读 2022-02-17 16:37:17
    目录预备知识1.UDP协议概述2.什么是UDP协议3.UDP协议的特点实验目的实验环境实验步骤一1.配置TCP&UDP测试工具2.配置服务器端3.配置客户端4.获取UDP数据包实验步骤二1.UDP首部格式2.分析UDP数据包 预备知识 1.UDP...

    预备知识

    1.UDP协议概述

    UDP是User Datagram Protocol(用户数据协议)的简称,是一种无连接的协议,该协议工作在OSI模型中的第四层(传输层),处于IP协议的上一层。传输层的功能就是建立“端口到端口”的通信,UDP提供面向事务的简单的不可靠信息传送服务。

    2.什么是UDP协议

    UDP协议是一种无连接的协议,该协议用来支撑那些需要在计算机之间传输数据的网络应用,包括网络视频会议系统在内的众多客户/服务器模式的网络应用。
    UDP协议的主要工作就是将网络数据流量压缩成数据包的形式。一个经典的数据包就是一个二进制数据的传输单位。每一个数据包的前8字节用来包含包头信息,剩余字节则用来包含具体的传输数据。

    3.UDP协议的特点

    UDP使用底层的互联网协议来传送报文,同IP一样提供不可靠的无连接传输服务。它也不提供报文到达确认、排序及流量控制等功能。下面详细介绍UDP协议的特点,如下所示:
    1.UDP是一个无连接的协议,也就是传输数据之前,源端口和目标端口不能建立连接。当它想传输时,就简单地抓取来自应用程序的数据,并尽可能快的把它扔到网络上。在发送端,UDP传输数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽限制。在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。
    2.由于传输数据不建立连接,因此也就不需要维护连接状态。所以,一台服务器可同时向多个客户机传输相同的消息。
    3.UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。
    4.吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端口和目标端口主机性能的限制。
    5.UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表。
    6.UDP是面向报文的。发送方的UDP对应用程序传输下来的报文,添加首部后就向下传送给IP层。既不拆分,也不合并,而是保留这些报文的边界。因此,应用程序需要选择合适的报文大小。
    虽然UDP是一个不可靠的协议,但它是分发信息的一个理想协议。例如,在屏幕上报告股票市场,在屏幕上显示航天信息等等。UDP也用在路由信息协议RIP(Routing Information Protocol)中修改路由表。在这些应用场合下,如果有一个消息丢失,几秒之后另一个新的消息就会替换它。UDP广泛用在多媒体应用中,例如,Progressive Networks公司开发的RealAudio软件,它是在因特网上把预先录制的或者现场音乐实时传送给客户机的一种软件。该软件使用的RealAudio audio-on-demand protocol协议就是运行在UDP之上的协议。大多数因特网电话软件产品也都运行在UDP之上,如QQ聊天、视频、网络电话、迅雷等。

    实验目的

    1)熟悉并掌握Wireshark的基本操作。
    2)加深对常用网络协议的理解,提高就业机会。
    3)培养学生理论联系实践的研究兴趣。

    实验环境

    在这里插入图片描述
    服务器:windows系统,IP地址:10.1.1.33
    测试者:windows系统,IP地址:10.1.1.142

    实验步骤一

    根据实验环境,本实验的步骤如下:
    1.安装发包工具,并与Wireshark配合使用,获取UDP数据包。
    2.分析获取的UDP数据包。
    任务描述:安装发包工具,并配置UDP客户端,服务端,与Wireshark配合使用。

    1.配置TCP&UDP测试工具

    实验室环境中,我们使用“TCP&UDP测试工具”来制作和发送UDP数据包。双击测试者机器桌面的“TCP&UDP测试工具”,会出现下图显示页面:
    在这里插入图片描述
    下面我们需要配置UDP的服务端以及客户端。

    2.配置服务器端

    选择10.1.1.33的机器,双击桌面的“TCP&UDP测试工具”,右键点击服务器模式,在下拉列表中,选择创建服务器,如下图:
    在这里插入图片描述
    选择“创建服务器”之后,会弹出服务器端口设置,本次使用默认工具给的6000端口即可,点击“确定”按钮。
    在这里插入图片描述
    点击“确定”按钮之后,在左侧的服务器模式列表中,会出现创建的列表,选择我们创建的服务器,右键点击,选择“启动服务器”,即完成了服务器端的配置:
    在这里插入图片描述
    配置完毕后,可以在实验机观察看,上图中,服务器模式下的红色标志消失。打开Wireshark,选择抓包网卡,在Filter里输入udp,并点击Apply按钮,准备抓包,如下:
    在这里插入图片描述

    3.配置客户端

    选择10.1.1.142的机器,双击桌面的“TCP&UDP测试工具”,右键点击客户端模式,在下拉列表中,选择“创建连接”,如下图:
    在这里插入图片描述
    在弹出的窗口中,选择UDP协议,服务器IP为10.1.1.33。端口6000,本机随意IP,如下图:
    在这里插入图片描述
    点击创建后,如下图:
    在这里插入图片描述
    点击上图中,红色的创建按钮,并启动Wireshark抓包,与服务器端配置Wireshark相同,选择UDP协议,准备抓包:
    在这里插入图片描述

    4.获取UDP数据包

    在10.1.1.142的UDP客户端,输入“hetianlab”,点击下图红色标注的发送按钮,即可产生UDP数据,并发送到10.1.1.33的服务器端,如下图:
    在这里插入图片描述
    客户端发送UDP数据,Wireshark截图如下(190帧数据):
    在这里插入图片描述
    服务端接收UDP数据,Wireshark截图如下(51帧数据):
    在这里插入图片描述

    实验步骤二

    任务描述:分析UDP数据包。

    1.UDP首部格式

    UDP数据报也是由首部和数据两部分组成。在首部定义了发出端口和接收端口,数据部分就是具体的内容。其中,UDP数据报首部部分共有8个字节,总长度不超过65535字节,正好可以放入一个IP数据报。为了使学习者对UDP数据报有一个更清晰的认识,下面将接收UDP首部格式,如下图:
    UDP首部格式:
    在这里插入图片描述
    在上图中,UDP首部每个字段的含义如下所示。
    Source port:用来传输数据包的端口。
    Destination port:数据报将要被传输到的端口。
    Length:数据报的字节长度。
    Checksum:用来确保UDP首部和数据到达时的完整性。
    Data:被UDP封装进去的数据,包含应用层协议头部和用户发出的数据。

    2.分析UDP数据包

    通过前面对UDP协议的详细介绍及数据包的捕获,现在就可以来分析UDP协议,以10.1.1.142发送的UDP数据报为对象。如下图:
    在这里插入图片描述
    从Wireshark的Packet Details面板中,可以看到共有5行详细信息。其中,第4行信息是UDP协议的详细信息。下面依次介绍Packet Details面板中的详细信息。
    在这里插入图片描述
    以上信息表示是第190帧信息,其中包的大小为51个字节。
    在这里插入图片描述
    以上信息表示是以太网帧首部的详细信息。其中,源MAC地址为02:00:04:78:01:7b,目标MAC地址为02:00:7b:16:02:43。
    在这里插入图片描述
    以上信息表示IPv4首部信息。其中源IP地址为10.1.1.142,目标IP地址为10.1.1.33。
    在这里插入图片描述
    以上信息表示传输层的数据报首部信息,此处是UDP协议。其中,源端口号为50262,目标端口号为6000(与服务器段配置一致)。该行信息,就是本章介绍的UDP协议包详细信息,下面对该部分内容展开介绍,如下所示:

    User Datagram Protocol, Src Port: 50262 (50262), Dst Port: 6000 (6000)
    Source Port: 50262 (50262)                  #源端口
    Destination Port: 6000 (6000)                #目标端口
    Length: 17                               #数据报长度
    Checksum: 0x16d3 [validation disabled]        #校验和
    Good Checksum: False
    Bad Checksum: False
    

    以上信息就是UDP首部中对应的每个字段。最后一行信息是应用层数据报大小,如下所示。

    Data (9 bytes)                                        #数据包
    Data: 68657469616e6c6162
    Length: 9                                    #数据长度为9个字节
    

    该行信息就是被UDP封装进去的数据,其大小为71个字节。
    将UDP协议首部的数据包详细信息对应到UDP首部格式中,结果如下:
    在这里插入图片描述

    展开全文
  • UDP协议抓包分析

    万次阅读 多人点赞 2019-05-22 17:10:25
    二、UDP协议的特点 UDP使用底层的互联网协议来传送报文,同IP一样提供不可靠的无连接传输服务。他也不提供报文到达确认、排序及流量控制等功能。 (1)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抓包工具

    2018-07-07 10:12:03
    MiniSniffer一个小巧的网络抓包工具(嗅探器),可以捕获各种程序开启的网络连接进行拦截数据功能,让您更方便的知道软件的数据传输流程。
  • 一.Socket、TCP、UDP 1. Socket 我们知道两个进程如果需要进行通讯最基本的一个前提能能够唯一的标示一个进程,在本地进程通讯中我们可以使用PID来唯一标示一个进程,但PID只在本地唯一,网络中的两个进程PID冲突...

    一.Socket、TCP、UDP
    1. Socket
    我们知道两个进程如果需要进行通讯最基本的一个前提能能够唯一的标示一个进程,在本地进程通讯中我们可以使用PID来唯一标示一个进程,但PID只在本地唯一,网络中的两个进程PID冲突几率很大,这时候我们需要另辟它径了,我们知道IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,这样我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程。

    能够唯一标示网络中的进程后,它们就可以利用socket进行通信了,什么是socket呢?我们经常把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。

    2. TCP
    TCP协议提供的是端到端服务。TCP协议所提供的端到端的服务是保证信息一定能够到达目的地址。它是一种面向连接的协议。
    TCP编程的服务器端一般步骤
    ①创建一个socket,用函数socket()
    ②绑定IP地址、端口等信息到socket上,用函数bind()
    ③开启监听,用函数listen()
    ④接收客户端上来的连接,用函数accept()
    ⑤收发数据,用函数send()和recv(),或者read()和write()
    ⑥关闭网络连接;
    ⑦关闭监听;
    TCP编程的客户端一般步骤
    ①创建一个socket,用函数socket()
    ②设置要连接的对方的IP地址和端口等属性
    ③连接服务器,用函数connect()
    ④收发数据,用函数send()和recv(),或者read()和write()
    ⑤关闭网络连接

    3. UDP
    UDP 是User Datagram Protocol的简称, 中文名是用户数据包协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768 是UDP的正式规范。UDP在IP报文的协议号是17。

    UDP协议与TCP协议一样用于处理数据包,在OSI模型中,两者都位于传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但即使在今天UDP仍然不失为一项非常实用和可行的网络传输层协议。
    UDP编程的服务器端一般步骤:
    1.创建一个socket,用函数socket()
    2.绑定IP地址、端口等信息到socket上,用函数bind()
    3.循环接收数据,用函数recvfrom()
    4.关闭网络连接
    UDP编程的客户端一般步骤:
    1.创建一个socket,用函数socket()
    2.设置对方的IP地址和端口等属性
    3.发送数据,用函数sendto()
    4.关闭网络连接

    二、UDP套接字发送信息
    按照以下步骤在VS2019中新建项目(控制台应用程序):

     

    代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace HelloWorldConsole
    {
        class Program
        {
            static void Main(string[] args)
            {
                //屏幕上连续输出50行“hello cqjtu!cj物联2019级”
                for(int t=0; t<50; t++)
                {
                    Console.WriteLine("Hello cqjtu! cj物联2019级");
                }
            }
            System.Console.ReadKey();
        }
    }
    

     运行结果

     

    3.使用UDP通信

    • 客户端代码准备
      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Net;
      using System.Net.Sockets;
      using System.Text;
      using System.Threading.Tasks;
      
      namespace Client
      {
          class Program
          {
              static void Main(string[] args)
              {
                  //提示信息
                  Console.WriteLine("按下任意按键开始发送...");
                  Console.ReadKey();
                  
                  int m;
      
                  //做好链接准备
                  UdpClient client = new UdpClient();  //实例一个端口
                  IPAddress remoteIP = IPAddress.Parse("127.0.0.1");  //假设发送给这个IP
                  int remotePort = 11000;  //设置端口号
                  IPEndPoint remotePoint = new IPEndPoint(remoteIP, remotePort);  //实例化一个远程端点 
      
                  for(int i = 0; i < 50; i++)
                  {
                      //要发送的数据:第n行:hello cqjtu!重交物联2018级
                      string sendString = null;
                      sendString += "第";
                      m = i+1;
                      sendString += m.ToString();
                      sendString += "行:hello cqjtu!cj物联2019级";
      
                      //定义发送的字节数组
                      //将字符串转化为字节并存储到字节数组中
                      byte[] sendData = null;
                      sendData = Encoding.Default.GetBytes(sendString);
      
                      client.Send(sendData, sendData.Length, remotePoint);//将数据发送到远程端点 
                  }
                  client.Close();//关闭连接
      
                  //提示信息
                  Console.WriteLine("");
                  Console.WriteLine("数据发送成功,按任意键退出...");
                  System.Console.ReadKey();
              }
          }
      }
      

    • 服务端代码准备
      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Net;
      using System.Net.Sockets;
      using System.Text;
      using System.Threading.Tasks;
      
      namespace Server
      {
          class Program
          {
              static void Main(string[] args)
              {
                  int result;
                  string str = "第50行:hello cqjtu!cj物联2019级";
                  UdpClient client = new UdpClient(11000);
                  string receiveString = null;
                  byte[] receiveData = null;
                  //实例化一个远程端点,IP和端口可以随意指定,等调用client.Receive(ref remotePoint)时会将该端点改成真正发送端端点 
                  IPEndPoint remotePoint = new IPEndPoint(IPAddress.Any, 0);
                  Console.WriteLine("正在准备接收数据...");
                  while (true)
                  {
                      receiveData = client.Receive(ref remotePoint);//接收数据 
                      receiveString = Encoding.Default.GetString(receiveData);
                      Console.WriteLine(receiveString);
                      result = String.Compare(receiveString, str);
                      if (result == 0)
                      {
                          break;
                      }
                  }
                  client.Close();//关闭连接
                  Console.WriteLine("");
                  Console.WriteLine("数据接收完毕,按任意键退出...");
                  System.Console.ReadKey();
              }
          }
      }
      

      运行结果
      客户端运行结果:

      服务端运行结果:

    •  

       4. 使用Wireshark进行抓包

      三、TCP使用窗口程序发送信息

      1.设计界面

      新建项目

    • 设计界面

    • 从工具箱内拖 2 个TextBox 和 1 个Button 控件 

    • 设置输入框属性
       

      设置文本属性,例如(宋体、常规、小四) 

    • 设置消息显示框属性
    • 添加垂直滚动条
    •  

    设置边界样式设置按钮属性设置窗体属性 

     

    代码准备

    • 客户端代码准备
      修改Form1代码如下
      using System;
      using System.Collections.Generic;
      using System.ComponentModel;
      using System.Data;
      using System.Drawing;
      using System.Linq;
      using System.Net;
      using System.Net.Sockets;
      using System.Text;
      using System.Threading.Tasks;
      using System.Windows.Forms;
      
      
      namespace UDPForms
      {
          public partial class Form1 : Form
          {
              public Form1()
              {
                  InitializeComponent();
              }
              public void button1_Click(object sender, EventArgs e)
              {
                  try
                  {
                      /*
                       * 显示当前时间
                       */
                      string str = "The current time: ";
                      str += DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                      textBox2.AppendText(str + Environment.NewLine);
                      /*
                       * 做好连接准备
                       */
                      int port = 2000;
                      string host = "127.0.0.1";//我室友的IP地址
                      IPAddress ip = IPAddress.Parse(host);
                      IPEndPoint ipe = new IPEndPoint(ip, port);//把ip和端口转化为IPEndPoint实例
                      Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket
                      /*
                       * 开始连接
                       */
                      str = "Connect to server...";
                      textBox2.AppendText(str + Environment.NewLine);
                      c.Connect(ipe);//连接到服务器
                      /*
                       *发送消息 
                       */
                      string sendStr = textBox1.Text;
                      str = "The message content: " + sendStr;
                      textBox2.AppendText(str + Environment.NewLine);
                      byte[] bs = Encoding.UTF8.GetBytes(sendStr);
                      str = "Send the message to the server...";
                      textBox2.AppendText(str + Environment.NewLine);
                      c.Send(bs, bs.Length, 0);//发送信息
                      /*
                       * 接收服务器端的反馈信息
                       */
                      string recvStr = "";
                      byte[] recvBytes = new byte[1024];
                      int bytes;
                      bytes = c.Receive(recvBytes, recvBytes.Length, 0);//从服务器端接受返回信息
                      recvStr += Encoding.UTF8.GetString(recvBytes, 0, bytes);
                      str = "The server feedback: " + recvStr;//显示服务器返回信息
                      textBox2.AppendText(str + Environment.NewLine);
                      /*
                       * 关闭socket
                       */
                      c.Close();
                  }
                  catch (ArgumentNullException f)
                  {
                      string str = "ArgumentNullException: " + f.ToString();
                      textBox2.AppendText(str + Environment.NewLine);
                  }
                  catch (SocketException f)
                  {
                      string str = "ArgumentNullException: " + f.ToString();
                      textBox2.AppendText(str + Environment.NewLine);
                  }
                  textBox2.AppendText("" + Environment.NewLine);
                  textBox1.Text = "";
              }
          }
      }
      

    • 服务端代码编写:
      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Net;
      using System.Net.Sockets;
      using System.Text;
      using System.Threading.Tasks;
      
      namespace ConsoleApp2
      {
          class Program
          {
              static void Main(string[] args)
              {
                  /*
                   * 做好连接准备
                   */
                  int i = 0;
                  int port = 2000;
                  string host = "127.0.0.1";
                  IPAddress ip = IPAddress.Parse(host);
                  IPEndPoint ipe = new IPEndPoint(ip, port);
                  Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket类
                  s.Bind(ipe);//绑定2000端口
                  /*
                   * 循环监听并处理消息
                   */
                  while (true)
                  {
                      i++;
                      try
                      {
                          Console.Write("Perform operations {0} :", i);
                          Console.WriteLine("\t-----------------------------------------------");
                          s.Listen(0);//开始监听
                          Console.WriteLine("1. Wait for connect...");
                          /*
                           * 实例一个新的socket端口
                           */
                          Socket temp = s.Accept();//为新建连接创建新的Socket。
                          Console.WriteLine("2. Get a connect");
                          /*
                           * 接收客户端发的消息并做解码处理
                           */
                          string recvStr = "";
                          byte[] recvBytes = new byte[1024];
                          int bytes;
                          bytes = temp.Receive(recvBytes, recvBytes.Length, 0);//从客户端接受信息
                          recvStr += Encoding.UTF8.GetString(recvBytes, 0, bytes);
                          Console.WriteLine("3. Server Get Message:{0}", recvStr);//把客户端传来的信息显示出来
                          /*
                           * 返回给客户端连接成功的消息
                           */
                          string sendStr = "Ok!Client send message sucessful!";
                          byte[] bs = Encoding.UTF8.GetBytes(sendStr);
                          temp.Send(bs, bs.Length, 0);//返回客户端成功信息
                          /*
                           * 关闭端口
                           */
                          temp.Close();
                          Console.WriteLine("4. Completed...");
                          Console.WriteLine("-----------------------------------------------------------------------");
                          Console.WriteLine("");
                          //s.Close();//关闭socket(由于再死循环中,所以不用写,但如果是单个接收,实例socket并完成任务后需关闭)
                      }
                      catch (ArgumentNullException e)
                      {
                          Console.WriteLine("ArgumentNullException: {0}", e);
                      }
                      catch (SocketException e)
                      {
                          Console.WriteLine("SocketException: {0}", e);
                      }
                  }
              }
          }
      }
      
      

      运行结果:

      客户端:

       服务端:

      . 使用Wireshark进行抓包 

       

     

    展开全文
  • UDP协议抓包分析 -- wireshark

    千次阅读 2020-10-03 20:20:35
    UDP协议抓包分析 – wireshark UDP是User Datagram Protocol用户数据报协议的简称。他是OSI七层模型中一种无连接的传输层协议,提供面向事务的简单的不可靠信息传送服务。 UDP协议就是一种无连接协议,该协议用来...
  • 抓包的同时解析数据包(不能等抓包停止后才解析),可判断IP、TCP或UDP数据包的校验和是否正确;支持BPF过滤器,抓包过程可以暂停和停止;可将数据包存储在pcap文件中,以供wireshark或其它数据包解析工具分析;可以...
  • wireshark各类数据包,AH ARP BGP CDP CHAP DNS DTP EAP HTTP ICMP IP IPV6 ISIS LCP LDP TCP UDP TELNET VLAN VTP WCCP CRRP等各类协议抓包数据
  • 2.分析获取的UDP数据包 任务描述:安装发包工具,并配置UDP客户端,服务端,与Wireshark配合使用 1.配置TCP&UDP测试工具 实验室环境中,我们使用" TCP&UDP测试工具"来制作和发送UDP数据包。双击测试者机器...
  • rtsp 抓包分析 tcp/udp

    2022-03-04 12:39:23
    rtsp 抓包分析 tcp/udp rtsp 抓包分析 tcp/udprtsp 抓包分析 tcp/udprtsp 抓包分析 tcp/udp
  • arduino的MDNS库,开发测试时的wireshark抓包分析,已过滤其他杂包
  • C++基于WinPcap抓UDP包解析内容,VS2013环境,宽字节
  • L2TP抓包分析pcapng

    2020-10-16 10:12:49
    协议是一种工业标准的Internet隧道协议,功能大致和PPTP协议类似,比如同样可以对网络数据流进行加密。不过也有不同之处,比如PPTP要求网络为IP网络,L2TP要求面向数据包的点对点连接;PPTP使用单一隧道,L2TP...
  • 前景 为啥要自己写一个mini UDP的协议栈?因为我们干偷偷摸摸的事情,哈哈哈!!! 其实是为了不跑一个庞大的LWIP协议栈,...要详细的看UDP协议的每一,每一Byte,每一Bit的含义,它是代表什么意思,怎么来的。
  • 【计算机网络实验 ——wireshark抓包简要分析TCP、UDP协议】 (1)分析 TCPheader: Source Port:16bit源端口,数据发起者的端口号; Destination Port:16bit目的端口,数据接收方的端口号; Sequence Number:32...
  • 通过wireshark这个抓包工具抓取udp协议的报文进行详细的分析。dns默认是基于udp协议的。 访问一个域名的过程中,其实就是会做一个域名解析。域名解析用到的就是dns协议(应用层协议)。下面就触发dns的流量,抓取...
  • UDP】通过udp抓包排查网络问题

    千次阅读 2021-12-11 00:34:39
    环境中应用节点的pinpoint agent通过向服务端 9999/tcp 上报节点信息,通过 向服务端 9995/udp 9996/udp 上报其他监控数据。 192.168.1.x 网段的应用节点,pinpoint节点、监控数据上报正常; 192.168.2.x 网段...
  • 主要介绍了使用Python实现windows下的抓包解析,非常不错,具有参考借鉴价值,需要的朋友可以参考下
  • wireshark抓包分析UDP

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

    2018-11-23 09:29:55
    rtsp,直播、rtp(udp). 关联文章:https://mp.csdn.net/postedit
  • # UDP(用户数据报协议)> 用户数据报协议(User Datagram Protocol,UDP)UDP是OSI参考...## 一、UDP协议1、面向事物,不是面向链接2、UDP不提供可靠性:它把应用程序传给IP层的数据发送出去,但是并不保证它们能到...
  • 实战中的TCP/UDP协议(wireshark抓包

    千次阅读 2019-08-06 22:56:22
    本篇是上篇《面试中的TCP/UDP协议》的姊妹篇,上篇简单的从概念的角度把TCP/UP协议的格式、特性解释了一下,但并没有解决全部的问题: 既然UDP只管发,不管送达与否,那UDP存在的意义?(换言之,通信的意义不正是...
  • winpcap抓包并进行协议解析

    热门讨论 2010-07-15 23:12:06
    本程序基于winpcap,可以实现抓包类型的选择,如ARP,IP,TCP,UDP,ICMP。一般网上的抓包程序都是利用原始套接字,而基于原始套接字的抓包程序是无法抓到网络层一下的包的,如ARP包。本程序实现的任意类型的抓包。...
  • 《计算机网络实验-使用Wireshark分析TCP和UDP...1、实验3 Wireshark抓包分析TCP和UDP协议一、实验目的1、通过利用Wireshark抓包分析TCP和UDP报文,理解TCP和UDP报文的封装格式.2、理解TCP和UDP的区别。二、实验环境与...
  • 使用wireshark抓取icmp,udp,ieee802.3,tcp,arp等协议
  • 在对app进行安全分析时,有时需要检查app的网络接口请求是否安全,网络协议交互是否可被恶意利用。因此就需要运行app并捕获其与服务端交互的网络数据进行分析。前面文章已介绍过http、https数据包的捕获,该篇文章...
  • [计算机网络] 实验3 UDP协议分析

    热门讨论 2022-05-10 20:36:39
    目录实验目的实验内容1.DNS查询UDP数据分析2.QQ通信UDP数据分析 实验目的 掌握运输层 UDP 协议内容 理解 UDP 协议的工作原理 了解应用层和运输层协议的关系 实验内容 1.DNS查询UDP数据分析 要求 : 使用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,618
精华内容 8,647
关键字:

抓包udp协议如何解析数据报