Linux基础 | nc 网络命令,通过TCP和UDP在两台主机间建立连接传递消息、文件

news/2024/11/28 22:35:57/

nc,全名叫 netcat,它可以用来完成很多的网络功能,譬如端口扫描、建立TCP/UDP连接,数据传输、网络调试等等,因此,它也常被称为网络工具的 瑞士军刀 。

使用方式

我们可以这样来使用它:

 
  1. nc [-46DdhklnrStUuvzC] [-i interval] [-p source_port] [-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_protocol] [-x proxy_address[:port]] [hostname] [port[s]]

常用选项:

  • -4:只使用 IPv4 地址
  • -6:只使用 IPv6 地址
  • -l:启动本地监听
  • -n:不使用 DNS 解析
  • -p:指定源端口
  • -s:指定源 IP 地址
  • -u:使用 UDP,默认是 TCP
  • -v:显示详细信息
  • -w:设定超时时间(只适合用在 Client 端)
  • -d:禁止从标准输入读取数据,也就是客户端输入数据不会发送到服务端
  • -k:让服务端保持连接,不断开

Linux 系统默认没有安装 nc,可以用下面的方法安装:

 
  1. # centos
  2. yum install nc
  3. # ubuntu
  4. apt-get install netcat

建立 C/S 聊天室

nc 的本质是在两台机器之间建立连接,之后就可以基于这个连接做很多事情,数据传输是其中一个最为基本的。我们下面就使用 nc 来建立一个 C/S 的聊天室。

模拟 Server 端:

 
  1. # -v :输出详细信息
  2. # -l :指定监听地址和端口
  3. nc -v -l 127.0.0.1 6000

模拟 Client 端:

 
  1. # -p : 指定源端口
  2. nc -v -p 5000 localhost 6000

之后,Client 和 Server 端就可以相互聊天了。

Client:

 
  1. # nc -v -p 5000 localhost 6000
  2. nc: connect to localhost port 6000 (tcp) failed: Connection refused
  3. Connection to localhost 6000 port [tcp/x11] succeeded!
  4. Hi, server
  5. Hi, client

Server:

 
  1. # nc -v -l 127.0.0.1 6000
  2. Listening on [127.0.0.1] (family 0, port 6000)
  3. Connection from [127.0.0.1] port 6000 [tcp/x11] accepted (family 2, sport 5000)
  4. Hi, server
  5. Hi, client

发送文件

nc 不仅可以发送消息,还可发送文件。

假设服务端有一个 out.txt 的空文件,而客户端有一个 in.txt 文件,含有数据:hello server

Server 端接收文件:

 
  1. nc localhost 6000 > out.txt

Client 端发送文件:

 
  1. nc localhost 6000 < in.txt

之后,我们可以看到 Server 端的 out.txt 文件中已经有数据了:

 
  1. # cat out.txt
  2. hello server

除了可以发送文件,nc 也可以发送目录,只需要将目录压缩发送即可。

支持 UDP 和 IPv6 连接

nc 默认使用 TCP 和 IPv4 协议建立连接,我们可以使用参数 -u 和 -6 参数来分别使用建立 UDP 和 IPv6 连接。

Server 端:

 
  1. nc -u -6 -l localhost 6000

Client 端:

 
  1. nc -u -6 localhost 6000

再开另一个终端,用 lsof 验证:

 
  1. # lsof -Pni | grep nc
  2. nc 1966 root 3u IPv6 19317 0t0 UDP *:6000
  3. nc 1976 root 3u IPv6 19330 0t0 UDP [::1]:49900->[::1]:6000

可以看到,Client 端和 Server 端都显示使用了 UDP 和 IPv6 协议。

端口扫描

端口扫描是一个非常重要的功能,很多时候系统管理员会通过扫描服务器上端口,来识别系统中漏洞,nc 工具提供了非常方便的操作:

 
  1. nc -vz 192.168.0.117 1-100

这条命令扫描 192.168.1.3 上 1-100 端口区间,有哪些端口是开放的。

 
  1. # nc -vz 192.168.0.117 1-100
  2. ...
  3. nc: connect to 192.168.0.117 port 21 (tcp) failed: Connection refused
  4. Connection to 192.168.0.117 22 port [tcp/ssh] succeeded!
  5. nc: connect to 192.168.0.117 port 23 (tcp) failed: Connection refused
  6. ...

可以看到,只有 22 号端口是开放的。

如果我们想扫描多个服务器上的多个端口是否开放,可以写一个脚本来完成,比如:

首先,用一个 sip.txt 保存所有服务器的地址:

 
  1. # cat sip.txt
  2. 192.168.1.2
  3. 192.168.1.3
  4. 192.168.1.4

再用一个 port.txt保存要扫描的端口号:

 
  1. # cat port.txt
  2. 22
  3. 80

然后,写一个脚本 portscan.sh 来遍历这个文件。

 
  1. # vim portscan.sh
  2. #!/bin/sh
  3. for server in `more sip.txt`
  4. do
  5. for port in `more port.txt`
  6. do
  7. nc -zv $server $port
  8. echo ""
  9. done
  10. done

给这个脚本赋予可执行权限:

 
  1. chmod +x portscan.sh

运行这个脚本就可以自动扫描多个服务器的多个端口是否开放了。

 
  1. # sh portscan.sh
  2. Connection to 192.168.1.2 22 port [tcp/ssh] succeeded!
  3. Connection to 192.168.1.2 80 port [tcp/http] succeeded!
  4. Connection to 192.168.1.3 22 port [tcp/ssh] succeeded!
  5. Connection to 192.168.1.3 80 port [tcp/http] succeeded!
  6. Connection to 192.168.1.4 22 port [tcp/ssh] succeeded!
  7. Connection to 192.168.1.4 80 port [tcp/http] succeeded!

总结

nc 通过在两台机器之间建立连接来完成很多网络功能,数据传输、网络连接、端口扫描等,也有助于我们进行网络调试,排查网络故障。


http://www.ppmy.cn/news/786708.html

相关文章

计算机图形学基础:实验5 OpenGL二维几何变换

1&#xff0e;实验目的&#xff1a; 理解并掌握OpenGL二维平移、旋转、缩放变换的方法。 2&#xff0e;实验内容&#xff1a; 阅读实验原理&#xff0c;掌握OpenGL程序平移、旋转、缩放变换的方法。根据示范代码&#xff0c;完成实验作业。 3&#xff0e;实验原理&#xff1…

稳压二极管

一、 定义 稳压二极管&#xff0c;英文名称Zener diode&#xff0c;又叫齐纳二极管。利用PN结的反向击穿状态&#xff0c;其电流可在很大范围内变化而电压基本不变的现象&#xff0c;制成的起稳压作用的二极管。 此二极管是一种直到临界反向击穿电压前都具有很高电阻的半导体器…

[MATLAB调试笔记]时变循环诊断——[Vx(x)],[Vx(t),Vy(t),Vz(t)],[Ex(x)],[波];[Eng(t)],[Ex(k)],[Ex(x,t)],[logEx(x.t)]

静电诊断结果 电磁诊断结果 function kempo1main%*************伪随机数************%rng(default);rng(1);global flag_exitflag_exit0%*************读取参数************%prm Parameters%********renormalization*********%[prm,ren] renorm(prm);%-- initialization --[h…

【剑指offer】9. 旋转数组的最小数字(java)

文章目录 旋转数组的最小数字描述示例1示例2思路完整代码 旋转数组的最小数字 描述 有一个长度为 n 的非降序数组&#xff0c;比如[1,2,3,4,5]&#xff0c;将它进行旋转&#xff0c;即把一个数组最开始的若干个元素搬到数组的末尾&#xff0c;变成一个旋转数组&#xff0c;比…

RabbitMQ系列(29)--RabbitMQ搭建Shovel

前言&#xff1a; Federation具备的数据转发功能类似&#xff0c;Shovel能够可靠、持续地从一个Broker中的队列(作为源端&#xff0c;即source)拉取数据并转发至另一个Broker中的交换器(作为目的端&#xff0c;即destination)。作为源端的队列和作为目的端的交换器可以同时位于…

AUTOSAR从入门到精通-【应用篇】基于 AUTOSAR 的四轮驱动客车整车控制器应用层软件开发研究

目录 前言 国内研究现状 国外研究现状 基于 AUTOSAR 的整车控制器应用层软件设计

惠普笔记本拆机详细步骤

第一次拆电脑&#xff0c;拆着玩玩&#xff0c;非也&#xff0c;拆机原因一&#xff1a;本人笔记本两个小喇叭&#xff0c;结果一个正常声&#xff0c;一个破音了&#xff0c;不管把声音调大还是调小&#xff0c;这破音的效果依然不减&#xff0c;把声音出孔堵住听着舒服点....…

笔记本拆装步骤及注意事项

笔记本拆装步骤及注意事项 一、首先清理桌面 保持桌面的干净整洁&#xff0c;以免和其它笔记本配件混淆和刮花笔记本机壳。 二、笔记本按机壳可分四大部分&#xff1a; ①A壳&#xff1a;笔记本未打开的时候&#xff0c;最上面的那面。 ②B壳&#xff1a;笔记本打开后与液晶屏同…