Linux 命令 socat - netcat 實(shí)用程序的出色替代品
Socat或SOcket CAT是一個(gè)基于 Linux 命令行/終端的實(shí)用程序,用于在兩個(gè)雙向字節(jié)流之間建立和傳輸數(shù)據(jù)。socat命令可以在多種場(chǎng)景下實(shí)現(xiàn),主要有兩個(gè)原因:
- 數(shù)據(jù)接收器和數(shù)據(jù)源;不同類型并存在于一個(gè)大集合中,可用于構(gòu)造流。
- 這些構(gòu)造的流可以與許多地址選項(xiàng)相關(guān)聯(lián)。
socat命令可以比作與TCP和UDP協(xié)議綁定的netcat 實(shí)用程序。但是,socat比netcat具有安全優(yōu)勢(shì)(chrooting),并且還支持設(shè)備、管道、文件、SSL、SOCKS4 客戶端、TCP 套接字、代理 CONNECT、UNIX 套接字等。
Socat 命令
為了更熟悉這個(gè) Linux 命令行實(shí)用程序,我們需要列出它的一些實(shí)際應(yīng)用。以下要點(diǎn)總結(jié)了一些流行的 socat 實(shí)用程序應(yīng)用程序:
- 安全測(cè)試和研究。
- 面向 TCP 的程序進(jìn)行串行線路重定向。
- 作為 UNIX 套接字 shell 接口。
- 建立 su 和 chroot 安全環(huán)境以在共享網(wǎng)絡(luò)連接上執(zhí)行服務(wù)器/客戶端 Shell 腳本。
- 不同計(jì)算機(jī)上串行線路的邏輯連接。
- IP6 relay。
- 通過(guò)攻擊弱防火墻進(jìn)行安全測(cè)試。
- TCP 端口轉(zhuǎn)發(fā)。
在 Linux 中安裝 Socat 實(shí)用程序
如果您的 Linux 操作系統(tǒng)發(fā)行版上尚未安裝基于socat Linux 命令行的實(shí)用程序,請(qǐng)參考您正在使用的 Linux 操作系統(tǒng)發(fā)行版參考以下安裝命令之一:
$ sudo apt install socat [在 Debian, Ubuntu 和 Mint 上]
$ sudo yum install socat [在 RHEL/CentOS/Fedora 和 Rocky Linux/AlmaLinux 上]
$ sudo emerge -a net-misc/socat [在 Gentoo Linux 上]
$ sudo pacman -S socat [在 Arch Linux 上]
$ sudo zypper install socat [在 OpenSUSE 上]
正如已經(jīng)討論過(guò)的,socat是netcat實(shí)用程序的出色替代品,因?yàn)樗哂袕?qiáng)大和高級(jí)的功能。我們現(xiàn)在應(yīng)該能夠通過(guò) Linux 命令行環(huán)境看到一些使用socat實(shí)用程序的實(shí)際示例。其使用語(yǔ)法如下:?
# socat [options] <address> <address>
確保您在 Linux 機(jī)器上擁有 sudoer/root 用戶權(quán)限。
1、監(jiān)聽(tīng)特定端口?
我們可以指示socat通過(guò)TCP協(xié)議監(jiān)聽(tīng)特定端口,例如80 ,并通過(guò)STDOUT打印出任何相關(guān)的發(fā)現(xiàn),如下所示。
$ sudo socat TCP4-LISTEN:80 STDOUT
TCP可以切換到其他不同的值,例如TCP6、TCP6-LISTEN和TCP4。
2. 連接到遠(yuǎn)程服務(wù)器的端口?
要連接到與端口關(guān)聯(lián)的服務(wù)器,我們將運(yùn)行:
$ sudo socat – TCP4:linuxmi.com:80
3. TCP 端口轉(zhuǎn)發(fā)器?
它也是一個(gè)有效的TCP端口轉(zhuǎn)發(fā)器。例如,端口81連接可以轉(zhuǎn)發(fā)到端口80,如下所示:對(duì)于單個(gè)連接。
$ sudo socat TCP4-LISTEN:81 TCP4:192.168.122.1:80
對(duì)于多個(gè)連接。
$ sudo socat TCP4-LISTEN:81,fork,reuseaddr TCP4:TCP4:192.168.122.1:80
您可以使用鍵盤組合取消端口轉(zhuǎn)發(fā)??[Ctrl]+c?
?。
4.監(jiān)聽(tīng)本地端口?
監(jiān)聽(tīng)本地端口www。
$ sudo socat TCP4-LISTEN:www TCP4:linuxmi.com:www
5. 監(jiān)聽(tīng)遠(yuǎn)程套接字上的特定端口?
如果我們想監(jiān)聽(tīng)一個(gè)特定的端口,接受它的連接并將它轉(zhuǎn)發(fā)到一個(gè)遠(yuǎn)程的 Unix 套接字,例如 mysql.sock,我們會(huì)以如下方式實(shí)現(xiàn) socat 命令:
$ sudo socat TCP-LISTEN:3309,reuseaddr,fork UNIX-CONNECT:/var/lib/mysql/mysql.sock
6. 基于網(wǎng)絡(luò)的消息收集器?
這個(gè)簡(jiǎn)單的例子演示了基于網(wǎng)絡(luò)的消息收集器的實(shí)現(xiàn)??蛻舳诉B接到端口 3354 成功后,文件/tmp/testing.log通過(guò)新生成的子進(jìn)程附加客戶端發(fā)送的數(shù)據(jù)。當(dāng)發(fā)現(xiàn)此文件不存在時(shí), socat會(huì)自動(dòng)創(chuàng)建此文件。
$ sudo socat -u TCP4-LISTEN:3354,reuseaddr,fork OPEN:/tmp/testing.log,creat,append
通過(guò)上面討論的幾個(gè)示例以及進(jìn)一步參考socat手冊(cè)頁(yè),我們應(yīng)該能夠深入探索它。
$man socat