精华内容
下载资源
问答
  • 如何发送udp报文
    千次阅读
    2014-07-05 15:07:13

    最近在做期货行情的自动化,由于需要集成到现有的QTP自动化框架中,所以就需要使用VBS脚本发送UDP报文,在网络上搜索了相关资料,遇到了一些问题,经历了一些波折,所以稍作整理,以飨可能同样需要使用的朋友~

    需要使用VB6的控件MSWINSCK.OCX,具体操作如下:

    1、把 MSWINSCK.OCX 放到 C:\WINDOWS\system32 目录下;
    2、点击开始-运行,然后输入regsvr32.exe MSWINSCK.OCX,进行注册;
    3、运行vbctrls.reg,注册MSWINSCK.OCX控件的秘钥;【否则会报错:类别未授权使用】
    4、重启电脑,可以使用VBS进行socket编程了;【特别注意,需要重启电脑!!】

    再给个简单的例子:

    dim sendata
    '创建Winsock对像 
    set sock = WScript.createobject("MSWinsock.Winsock")
    sock.AboutBox
    '使用UDP协议 
    sock.Protocol=1
    '建立连接 
    sock.Connect "127.0.0.1",8888
    '定义要发送的数据 
    sendata="0 186IF1409,2148.0,2148.0,2144.4,2143.8,5,5,2144.4,4,4,2159.0,2140.4,2148.3,0,10249,0,6605478720.0,2362.8,1933.2,4,0,0,0,0,2145.0,29343,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255.255.255.255"&chr(13)  
    '发送我们要发的数据 
    sock.senddata sendata

    以上均为本人亲自验证通过~

    所需文件下载地址:http://download.csdn.net/detail/zhouzhou423/7596555

    更多相关内容
  • UDP协议报文分析和主动发送UDP简单实现 前言 一、Wireshark 报文解析 1、UDP报文实例 2、报文格式分析 ①、以太网头 ②、IP头 ③、UDP头 二、UDP主动传输数据的实现方式 1、说明 2、发送UDP前的约定 3、ARP报文 4、...

    前言

      用 Wireshark 简单分析UDP报文解析,学习UDP报文的解析。在需要编写底层UDP报文的环境下(单片机等),简单编排UDP报文达到主动传输的目的。

    一、Wireshark 报文解析

    1、UDP报文实例

      
    在这里插入图片描述

    2、报文格式分析

      一帧UDP报文由四个部分组成:以太网头、IP头、UDP头、数据。

    帧头帧数据含义对应报文(HEX)位数
    以太网头目标MAC地址00:aa:00:00:00:7b6*8
    源MAC地址e0:db:55:f8:d1:e56*8
    协议类型08 002*8
    IP头IP协议版本44
    IP头长度54
    服务类型TOS008
    报文总长度(IP报文开始)00 212*8
    标识符(序号)c2 a12*8
    标志位 00 002*8
    帧存活周期TTL408
    数据协议118
    IP校验和32 502*8
    源IP地址c0 a8 02 0f4*8
    目标IP地址c0 a8 02 7b4*8
    UDP头源端口号2c ee2*8
    目标端口号01 f62*8
    报文总长度(UDP报文开始)00 0d2*8
    UDP校验和17 f32*8
    数据帧传输数据11 11 11 11 11n*8

    ①、以太网头

    以太网头常用格式
      以太网头使用两种标准帧格式。第一种是上世纪80年代初提出的DIXv2格式,即EthernetII帧格式。EthernetII后来被IEEE802标准接纳,并写进了IEEE802.3x-1997的3.2.6节。第二种是1983年提出的IEEE802.3格式。普通情况下使用EthernetII帧格式更简单便捷。
      报文中 Type 为" 08 00 "表示后续报文的协议为IP协议帧,若 Type 为"08 06 "表示后续报文为ARP帧。
      

    ②、IP头

      若为主动发送的UDP报文,IP头中开头的“45 00”以及“00 00 40 11”可以不用修改,主要修改其他数据。其中“40”表示帧存活时间为64秒,“11”表示后续协议为UDP协议。
      IP头的数据帧主要修改的部分为:IP头开始的数据长度、标识符id、IP校验、对端IP、本机IP。
      数据长度:IP头的长度+后续报文长度。例如实例中的报文长度为0x0021(33),即IP头长度20、UDP头长度8和数据长度5相加(20+8+5)而来。
      标识符ID:可以理解为报文的编号,一般是由上一帧的标识符计算加一。
      对端IP:目标IP地址。
      本机IP:本机IP地址。
      

    ③、UDP头

      UDP头的数据帧主要注意UDP校验和的计算方式,需要同时计算UDP伪首部。

    二、UDP主动传输数据的实现方式

    1、说明

      以下方法的测试环境是在局域网内,且无其他设备同时连接的环境下实现的,仅用与点对点的传输方式。

    2、发送UDP前的约定

      在发送UDP报文前,想要对端设备收到UDP报文,就必须知道对端的设备部分信息:目标MAC地址、目标IP地址、目标端口号。其中目标IP地址和目标端口号可以在约定后直接进行绑定,但目标MAC地址在很多情况下无法直接得出,且在对端设备更换后会随着变动。此时,我们可以用ARP协议获取MAC地址。

    3、ARP报文

      ARP(Address Resolution Protocol),地址解析协议,是根据IP地址获取物理地址的一个TCP/IP协议。
      在发送UDP报文前,可以先发送一帧ARP报文请求,报文需要修改的部分为:本机MAC地址(30:3a:64:9f:32:06)、本机IP(0xc0a8 0067)、目标IP(0xc0a8 0065),其他部分可以参照图中请求报文的数据直接写死。报文中 06 04 后的两个字节是Opcode, 00 01 表示ARP请求报文,若为 00 02 表示应答报文。
      发送ARP报文后会收到ARP的回复报文,回复报文中包含目标IP地址和MAC地址,和本机的IP地址和MAC地址,可以在确认ARP回复报文的目标IP为本机IP后,再将该MAC地址缓存,取得需要的MAC地址为(3e:c8:be:6e:f4:06)。
      ARP报文举例,如图所示:
      请求报文:
    请求报文
      应答报文:
    应答报文

    4、UDPIP报文

      通过ARP报文获取到对端MAC地址后,就可以开始编辑发送UDP报文了。
      (1)编写以太网头部。 写入目标MAC地址(00:aa:00:00:00:7b)、本机MAC地址(e0:db:55:f8:d1:e5)、Type(0x08 00)。
      (2)将IP头的数据长度、IP校验和的四个字节置为0,先填充的IP头部的其他位。 写入IP版本以及长度(0x45)、区分服务领域(0x00)、ID号(0xc2 a1)、标志位Flags(0x00)、ttl(0x40)、协议号(0x11)、本机IP地址(0xc0 a8 02 0f)、目标IP地址(0xc0 a8 02 7b)。
      (3)将UDP头的数据长度、IP校验和的四个字节置为0,先填充的UDP头部的其他位。 写入本机源端口(0x2c ee)、目标端口(0x01 f6)、ID号(0x00 00)。
      (4)填充UDP需要传输的数据。 在UDP报文头之后写入需要传输的数据(0x11 11 11 11 11)。
      (5)根据传输的数据长度,填充IP头中的总长度(0x00 21)。 该长度计算方式为:IP头报文长度20 + UDP报文头长度8 + 数据长度5 = 33。
      (6)根据传输的数据长度,填充UDP头中的总长度(0x00 0d)。 该长度计算方式为:UDP报文头长度8 + 数据长度5 = 13。
      (7)根据IP头报文已填充数据,计算校验和,填充IP头中的校验位(0x32 50)。
      (7)根据IP头和UDP头报文已填充数据,计算校验和,填充UDP头中的校验位(0x17 f3)。

    三、UDP报文校验

    1、IP校验和计算

      对IP报文头从首部开始以16bit为单位求和,将计算结果溢出16bit的部分加在低16bit上,取反。
      忽略校验位数据,将上述实例报文的IP头从首部开始以16bit为单位拆分后,得到一组数据:0x4500,0x0021,0xC2A1,0x0000,0x4011,0xC0A8,0x020F,0xC0A8,0x027B。
      将上述拆分的16bit数据累加:   0x4500+0x0021+0xC2A1+0x0000+0x4011+0xC0A8+0x020F+0xC0A8+0x027B=0x2 CDAD;
      将上结果的高16位加在低16位数据得到:0xCDAF;
      将得到的0xCDAF作位取反得:0x3250。
    简单代码段如下:

    /*sendbuf[]是要发送的报文,计算前要先填充其他数据*/
    static u16_t
    ipchksum()
    {
      u16_t i,index=14; //从sendbuf[14]开始计算,即IP头开始位置。
      u32_t sum=0;
    
      for(i=0;i<5;i++){
    	  sum+=((u16_t)sendbuf[index]<<8)+sendbuf[index+1];
    	  index+=2;
      }
      index+=2;
      for(i=0;i<4;i++){
    	  sum+=((u16_t)sendbuf[index]<<8)+sendbuf[index+1];
    	  index+=2;
      }
    
      sum = (sum >> 16) + (sum & 0xffff);
    
      return (~sum & 0xffff);
    }
    

    2、UDP校验和计算

      对UDP报文头从首部开始以16bit为单位求和,求和时包含后续所有数据以及UDP伪首部数据;将计算结果溢出16bit的部分加在低16bit上,取反。
      (1)先计算伪首部,伪首部由四部分组成:源地址(0xc0a8,0x020f)、目的地址(0xc0a8,0x027b)、UDP数据长度(0x000d)、协议类型(0x0011)。将UDP伪首部以16位求和得到(0x0001 85F8)。
      (2)再计算UDP头部报文,由四部分组成:源端口(0x2cee)、目标端口(0x01f6)、UDP数据长度(0x000d)、数据(0x1111、0x1111、0x1100)。以16位求和得到(0x6213)。这里要注意的是数据结尾如果为单数,需要在低8位填充0x00,而不是高八位填充,即0x11填充为0x1100再求和。
      (3)将UDP的伪首部和与UDP头部和求和(0x1 85f8 + 0x6213);将计算结果的高16位加到低16位得到(0xe80c);进行取反运算,得到最终UDP校验和0x17f3。

    简单代码段如下。

    /*sendbuf[]是要发送的报文,计算前要先填充其他数据*/
    static u16_t
    udpchksum(u16_t datalen)
    {
      u16_t i,index=26;
      u32_t sum=0;
    
      sum = 0x11; //计算伪首部
      for(i=0;i<7;i++){
    	  sum+=((u16_t)sendbuf[index]<<8)+sendbuf[index+1];
    	  index+=2;
      }
      index-=2;
      sum+=((u16_t)sendbuf[index]<<8)+sendbuf[index+1];
      index+=4;
    
      for(i=0;i<(datalen/2);i++){
    	  sum+=((u16_t)sendbbf[index]<<8)+sendbuf[index+1];
    	  index+=2;
      }
      if(datalen%2){
          sum+=((u16_t)sendbbf[index]<<8);
      }
      
      sum = (sum >> 16) + (sum & 0xffff);
    
      return (~sum & 0xffff);
    }
    
    展开全文
  • UDP基本报文发送

    2020-10-24 15:34:27
    一、基本的UDP操作 1.启动服务端 public static void startUDPServer() { /* 服务端要做的事情 */ try { System.out.println("启动服务器:"); DatagramSocket server = new DatagramSocket(PORT);//指定...

    一、基本的UDP操作

    1.启动服务端

    public static void startUDPServer() {
            /*
            服务端要做的事情
             */
            try {
                System.out.println("启动服务器:");
                DatagramSocket server = new DatagramSocket(PORT);//指定UDP服务器绑定的端口、地址
                byte[] buffer = new byte[512];
                DatagramPacket packet = new DatagramPacket(buffer, buffer.length);//定义接受的包大小
                server.receive(packet);//阻塞接收数据包
                String result = new String(buffer);
                System.out.println("result:"+result);
            } catch (SocketException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    2.启动客户端

    public static void startUdpClient() {
            DatagramSocket datagramSocket = null;
            try {
                //客户端不能去绑定UDP端口,只有服务端才去绑定端口
                //datagramSocket = new DatagramSocket(PORT);
                datagramSocket = new DatagramSocket();
                SocketAddress address = new InetSocketAddress(InetAddress.getLocalHost(),PORT);
                System.out.println("please enter:");
                Scanner scanner = new Scanner(System.in);
                if (scanner.hasNextLine()) {
                    String input = scanner.nextLine();
                    //DatagramPacket packet = new DatagramPacket(input.getBytes(),input.getBytes().length);
                    //datagramSocket.connect(address); //packe中没有指定送达地址时,则在这里connect
                    //datagramSocket.send(packet);
                    DatagramPacket packetWithAddr = new DatagramPacket(input.getBytes(),input.getBytes().length,address);
                    datagramSocket.send(packetWithAddr);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

     

    展开全文
  • 计算机网络之UDP报文

    2022-03-14 08:47:19
    计算机网络之UDP报文

    计算机网络之UDP报文

    1.UDP报文

    每个 UDP 报文分为 UDP 报头和 UDP 数据区两部分。报头由 4 个 16 位长(2 字节)字段组成,分别说明该报文的源端口、目的端口、报文长度和校验值
    UDP报文中每个字段的含义如下:
    源端口:这个字段占据 UDP 报文头的前 16 位,通常包含发送数据报的应用程序所使用的 UDP 端口。接收端的应用程序利用这个字段的值作为发送响应的目的地址。这个字段是可选的,所以发送端的应用程序不一定会把自己的端口号写入该字段中。如果不写入端口号,则把这个字段设置为 0。这样,接收端的应用程序就不能发送响应了。
    目的端口:接收端计算机上 UDP 软件使用的端口,占据 16 位。
    长度:该字段占据 16 位,表示 UDP 数据报长度,包含 UDP 报文头和 UDP 数据长度。因为 UDP 报文头长度是 8 个字节,所以这个值最小为 8。
    校验值:该字段占据 16 位,可以检验数据在传输过程中是否被损坏。

    image-20220215084910004

    展开全文
  • 可自行修改UDP监听端口,显示UDP报文内容
  • 双击安装好后,可导入单个或者多个报文,修改报文的源ip\mac及目的ip\mac,报文内容不改变,实现报文重放
  • java UDP报文发送与接收

    热门讨论 2010-06-21 16:49:29
    java UDP报文发送与接收 java UDP报文发送与接收 java UDP报文发送与接收
  • udp
  • 1.放在jmeter的 lib-ext目录下重启jmeter即可
  • 发送UDP报文全部丢失

    2019-03-20 15:35:18
    一般来说,UDP报文丢包是不可避免的,可能原因也多种多样,但是如果出现全部丢包的现象,大多是因为防火墙。 今天遇到了这样的问题,记录一下: 解决过程是这样的,首先,我去看了一下接收方的端口占用情况 ...
  • C# Socket TCP和UDP报文及端口测试工具的开发(提供源码)
  • Qt收发tcp/udp报文,报文解析

    千次阅读 2021-09-02 10:11:29
    Qt中udp和tcp收发方式基本类似 发送数据 //定义报文结构体 //通用报文头格式,所有报文均包含该头部 struct VTM_CommonHeader{ unsigned int uType; //业务类型 unsigned int uSize;//报文大小 }; struct VTM_...
  • 其中有一个工作空间,两个工程,一个是UDP server的代码,一个是UDP client的代码,可以实现发送和接收UDP报文。如果更改其中的IP地址和端口,还可以向其他设备发送UDP报文,或者从其他设备接收UDP报文
  • 基于raw socket的UDP数据的发送和接收,自定义IP头,UDP头,数据
  • 这个压缩包里面一共有两个工具,,一个是用于抓包分析报文的。。还有一个用于建立TCP UDP连接,发送报文的,可以用来调试自己写的网络程序。
  • 采用UDP通信的Qt程序,当接收方与发送方正常连接发送报文后,本地定时器自动发送,当中断发送发送时,接收方仍然有空报文接收到: 接收报文原程序: QByteArray datagram; datagram.resize(udpSocket->...
  • 通过j2se upd网络编程,发送报文。我这里只是客户端,修改数据库连接,主要是把数据库里面的图片(base64编码处理),拆成包,发送给服务端。
  • UDP报文结构及检验和

    千次阅读 2019-03-12 18:18:37
    报文结构 源端口:源端口号。在需要对方回信时选用。不需要时可用全0。...发送方的UDP对报文段中所有16比特字的和进行反码运算,求和时遇到的任何溢出都被回卷,得到的结果放在UDP报文段中的检验...
  • TCP/UDP报文格式及各种通信机制简介

    千次阅读 2022-05-29 20:23:18
        UDP报文中包含 :(1) 16位源端口和目的端口,用于表示自己的端口号和将要发送的目的端口号。 (2) 16位UDP长度,表示8字节报头和UDP数据的总长度,用于确定报文长度。 (3) 16位校验和,用于在接收端...
  • echo “hello world” > /dev/udp/224.0.0.2/14555 运行上方代码,即可向IP为224.0.0.2,端口为14555发送内容为hello world的数据
  • udp 通信发送 16 进制报文
  • Linux发送udp/tcp包最简单方法-netcat

    千次阅读 2021-11-09 21:29:24
    由于测试需要,需要从一台linux向另一台建立连接,并发送tcp/udp包。觉得用python写个client/server脚本有点麻烦,于是想找一个命令直接发送,一搜就搜到了netcat 网络拓扑 服务器 先在机器B上进行netcat服务器...
  • 主要内容:qt作为客户端实现报文的收发,用定时器实现定时写,可断开重新连接。 测试别忘记关掉防火墙。 以下代码是简化过的,仅供参考,如有不当之处,欢迎指正。 下载链接(永久有效,失效请评论): 链接:...
  • UDP报文模拟

    2012-04-11 10:20:54
    简单的UDP报文模拟发包工具 对于有些网络设备的测试还是很方便的。小巧好用 不占资源 功能简单
  • Android收发UDP报文详解

    千次阅读 2020-04-27 15:55:11
    构造DatagramSocket对象 根据发送IP 来创建InetAddress对象 根据InetAddress对象、发送端口号、发送数据 来创建发送的DatagramPacket数据包对象 调用DatagramSocket对象的send(datagramPacket) 方法,发送UDP报文 ...
  • udp返回报文ICMP的

    2020-12-15 23:08:27
    该错误报文中会包括前8个字节的原数据包内容,这就是你在ICMP中看到的UDP部分。 https://www.phpfans.net/ask/linux1/7740267830.html 关于UDP接收icmp端口不可达(port unreachable) ...
  • Java使用UDP协议发送和接收数据

    千次阅读 2021-12-21 16:48:35
    Java使用UDP协议发送和接收数据
  • 资源名:matlab使用UDP协议发送和接收报文程序源码.zip 资源类型:程序源代码 源码说明: 基于matlab的使用UDP协议发送和接收报文程序源码,有发送和接收端两套程序,包含完整代码和注释,非常适合借鉴学习 适合人群...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 121,338
精华内容 48,535
热门标签
关键字:

如何发送udp报文