介绍两款好用的 Linux 端口转发工具,socat 和 nc

linux   socat   netcat   nc   端口转发  
发布于 Aug 29, 2024

今天的内容很简单,主要分享 2 个有用的 Linux 端口转发的工具,涨涨见识,主打一个不让脑子和手闲着,开整吧。

这里所说的端口转发和 nginx 之类的反向代理还是有些区别的,更加底层一点。

推荐你看一下 TCP/IP 协议相关的网络协议,反正也记不住,就只看看好了

这 2 个工具分别是:

1,socat,名字来由是 「Socket CAT」,其功能与有网络瑞士军刀之称的 netcat 类似,可以看做是 netcat 的加强版
2,netcat (nc),就是上面说的网络瑞士军刀了

启动待验证端口

为了验证端口转发,临时通过 docker 启动一个 nginx,并暴露 5000 端口。

docker run --rm -d -p 5000:80 nginx:alpine

netstat -antp | grep LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      706/sshd: /usr/sbin 
tcp        0      0 0.0.0.0:5000            0.0.0.0:*               LISTEN      19081/docker-proxy  
tcp6       0      0 :::5000                 :::*                    LISTEN      19087/docker-proxy

curl -i http://localhost:5000

socat

首先需要安装 socat

yum install -y socat
socat -V

更多安装教程请移步:https://fasionchan.com/network/toolkit/socat/

假设,需要将本地 6000 端口转到指定的 5000 端口,利用如下 socat 命令

socat TCP-LISTEN:6000,fork TCP:127.0.0.1:5000

打开另一个终端窗口查看及验证

netstat -antp | grep LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      706/sshd: /usr/sbin 
tcp        0      0 0.0.0.0:5000            0.0.0.0:*               LISTEN      19081/docker-proxy  
tcp        0      0 0.0.0.0:6000            0.0.0.0:*               LISTEN      19183/socat         
tcp6       0      0 :::5000                 :::*                    LISTEN      19087/docker-proxy

curl -i http://localhost:6000

关闭转发,ctrl + c 或者 杀掉对应进程即可,上面 netstat 命令中也有对应的 PID 19183。

ps -ef | grep socat
root       19183    1264  0 14:34 pts/0    00:00:00 socat TCP-LISTEN:6000,fork TCP:127.0.0.1:5000

kill -9 19183

netcat (nc)

首先安装 nc

yum install -y nc
nc --version

更多安装教程移步:https://developnsolve.com/how-to-install-netcat-nc-on-linux

假设,需要将本地 6000 端口转到指定的 5000 端口,利用如下 nc 命令

nc -l -k -p 6000 -c "nc 127.0.0.1 5000"

同上,打开另一个终端.

netstat -antp | grep LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      706/sshd: /usr/sbin 
tcp        0      0 0.0.0.0:5000            0.0.0.0:*               LISTEN      19081/docker-proxy     
tcp        0      0 0.0.0.0:6000            0.0.0.0:*               LISTEN      19219/nc            
tcp6       0      0 :::5000                 :::*                    LISTEN      19087/docker-proxy  
tcp6       0      0 :::6000                 :::*                    LISTEN      19219/nc

curl -i http://localhost:6000

关闭端口转发同上,ctrl + c 或者 杀掉对应进程即可。

netstat -talnp
tcp        0      0 0.0.0.0:6000            0.0.0.0:*               LISTEN      19219/nc
tcp6       0      0 :::6000                 :::*                    LISTEN      19219/nc

kill -9 19219

今天介绍了 2 种方式实现 linux 网络端口转发,比较简单和实用,希望对你有所帮助。

本次的分享到此结束,希望对你有所帮助。

如果你对我分享的内容感兴趣,欢迎扫码关注公众号:新质程序猿,并设置星标,推送更实时哟!

本文由 黄彦祥 创作,采用 知识共享署名 3.0 中国大陆许可协议 进行许可。
可自由转载、引用,但需署名作者且注明文章出处。