MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > 精选文章 / 正文

如何在Linux命令行下发送和接收UDP数据包

2025-02-04 14:16 huorong 精选文章 5 ℃ 0 评论

众所周知,在传输层有两个常用的协议TCP和UDP,本文介绍在Linux命令行下,如何使用nc命令发送或接收UDP数据包,这些命令的用法对调试UDP通信程序将有所帮助。

1. 问题的提出

编写了一个使用raw socket在数据链路层接收原始UDP数据包的程序,调试的时候,需要使用局域网中的另一台机器发送UDP数据包,突然发现居然一下子想不出如何在命令行上发送数据包;首先想到的是用curl,但又一想不对,curl只能使用应用层协议透过TCP协议发送数据包,所以可以发HTTP请求包,FTP请求包等,是不能发送UDP数据包的。

终于想起了不怎么使用的nc命令,可以很方便地发送UDP数据包

2. 文章要点

  1. 理解Linux下的nc命令;
  2. 使用nc命令在网络上发送或接收UDP报文;
  3. 抓取nc命令发送的UDP报文;
  4. 介绍其它可以发送UDP报文的命令。

3. netcat 命令

  • nc是netcat的简写,大多数的Linux发行版中默认是安装netcat的,打开一个终端窗口(ctrl+alt_t),用下面命令检查一下是否已经安装了netcat:
nc
  • 在ubuntu 20.04下的输出:
usage: nc [-46CDdFhklNnrStUuvZz] [-I length] [-i interval] [-M ttl]
          [-m minttl] [-O length] [-P proxy_username] [-p source_port]
          [-q seconds] [-s source] [-T keyword] [-V rtable] [-W recvlimit] [-w timeout]
          [-X proxy_protocol] [-x proxy_address[:port]] 	  [destination] [port]
  • 这个输出表示当前的Linux下已经有nc命令了。

4. 发送 UDP 数据包

  • 举个例子,假定我们要从A机发送一个UDP报文到B机,按照server-client的概念,我们把B机作为server端,A机作为client端;
  • A机的IP: 192.168.2.112;B机的IP:192.168.2.114
  • 启动server

在B机上用如下命令启动Server

nc -u -l 8888

下面是屏幕截图

启动后,并没有更多的提示,当收到信息时,会显示收到的信息

  • 检查server是否启动

在B机上启动一个新的终端窗口;

在B机上使用如下命令检查是否已经启动server;

netstat -a|grep 8888

屏幕截图

  • 发送UDP报文

在A机上启动client

nc -n 192.168.2.114 8888

client启动后,和server端一样,并没有更多的提示,可以直接输入你要发出的信息

在A机输入信息:I am from ubuntu system A.

下面是A机上的屏幕截图

下面是B机上的屏幕截图

也可以在B机输入信息,信息会发送到A机

在B机输入信息:I am from ubuntu system B.

下面是在B机的截图

下面是在A机的截图

5. 其它可以发送UDP数据包的命令

  • 还有一个可以简单地发送UDP报文的方法,我们在A机上退出nc,然后使用下面命令发出信息
echo -n "I am sending an UDP packet using echo command" > /dev/udp/192.168.2.114/8888
  • 下面是在A机上的截屏
  • 下面是在B机上的截屏
  • 很显然使用cat命令也可以发送UDP报文:

欢迎访问我的博客:https://whowin.cn

Tags:ncftp

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言