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码。
原文地址
最新评论