UDP協議測試


UDP協議測試

我們一般想到測試連通性時第一考慮到的就是使用ping命令。

但是我們知道ping命令使用的是icmp協議,屬於tcp/ip協議中的一個子協議,所以我們可以用ping或tcping命令來測試tcp的連通性還可以測試延遲情況。

但是當我們需要測試udp連接的時候ping命令顯然沒有任何作用,也就是說ping命令無法對udp進行測試

我們知道socket端口可以通過telnet x.x.x.x port來測試主機與目標端口的網絡是否通暢。那么udp端口如何測試呢:

這時候我們可以用到netcat,這個命令被譽為是網絡中的“瑞士軍刀”,功能非常強大,測試udp只是其中的一個功能變通。

在安全領域nc常用來端口監聽轉發,用的比較多的也是windows版的NC,在運維中需要常用到linux上的nc,而一般linux會默認集成這個命令,根據不同系統命令不同,有的為“nc”,有的為“netcat”,大家可以根據實際系統嘗試下。

 

UDP端口連接測試:

    1.測試目標端口是否正常(前提是目標主機上啟動了服務端口,且本機與服務端網絡通暢的情況):  nc -vuz x.x.x.x  xxxx

 2.向UDP端口發送消息: nc -vu x.x.x.x xxxx

  3.通過抓包命令進行抓包,接收UDP端口抓包: tcpdump -i eth0 -s 0 port 1814(注:抓包需要root權限)

 

 

udp數據發送測試

1,UDP 的小程序

我自己寫了一個UDP 的小程序,有一個UDP 的server,而且有UDP的client。

      然后執行server和client,然后用tcpdump將該端口的UDP數據報文抓取出來。

      執行的過程是這樣的。

      client向server發送"xiyou"

     server向client應答"wangzhe"

      client程序在主機example上運行(192.168.0.18)

      server程序在主機linux上運行(192.168.0.9)

 

2,UDP數據報文

linux@linux:~$ sudo tcpdump -vvv -X  udp port 7777
[sudo] password for linux: 
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
11:03:01.923227 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 48)
    example.local.43521 > linux.7777: [udp sum ok] UDP, length 20
    0x0000:  4500 0030 0000 4000 4011 b677 c0a8 0190  E..0..@.@..w....
    0x0010:  c0a8 0165 aa01 1e61 001c 4c34 7869 796f  ...e...a..L4xiyo
    0x0020:  7500 0000 0000 0000 0000 0000 0000 0000  u...............
11:03:01.923343 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 48)
    linux.7777 > example.local.43521: [bad udp cksum 6869!] UDP, length 20
    0x0000:  4500 0030 0000 4000 4011 b677 c0a8 0165  E..0..@.@..w...e
    0x0010:  c0a8 0190 1e61 aa01 001c 8473 7761 6e67  .....a.....swang
    0x0020:  7a68 6500 0000 0000 0000 0000 0000 0000  zhe.............

由上面的報文可知,有兩個UDP數據報文。

第一個報文是example主機上的client向server發送數據。

4500 0030 0000 4000 4011 b677 c0a8 0190 c0a8 0165 這20個數據是IP首部。

aa01 1e61 001c 4c34 這8個字節是UDP的首部。

7869 796f 7500 0000 0000 0000 0000 0000 0000 0000 這20個數據是我用sendto函數發送的

數據。

 

而將char req[20] = "xiyou" 的ASCII碼(16進制)就是:

78 69 79 6f 75 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

 

第二個報文是linux向主機example做出的應答。

4500 0030 0000 4000 4011 b677 c0a8 0165 c0a8 0190 這20個數據是IP首部。

1e61 aa01 001c 8473 這8個字節是UDP首部。

7761 6e67 7a68 6500 0000 0000 0000 0000 0000 0000 這20個數據是應用層的數據。

 

而將char reply[20] = "wangzhe"的ASCII碼(16進制)就是:

77 61 6e 67 7a 68 65 0 0 0 0 0 0 0 0 0 0 0 0 0

 

由此看出,應用層的數據沒有夾雜其他的參數,全部是數據,均是字符的ASCII碼。

 

 

原文地址

https://www.cnblogs.com/leocorn/p/11697437.html

https://blog.csdn.net/qq_34738528/article/details/100140248


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM