天天看點

socat netcat nc 網絡工具/黑客工具

socat

2016/05/11 Chenxin整理

socat簡介

黑客小工具—socat

socat 被稱為是NC的plus,plus版,号稱NC的最強的衍生版本。socat是一款雙向資料流通道工具。具有許多強大的功能:端口的連接配接、端口偵聽、收發檔案、傳遞shell、端口轉發、端口掃描等

官方網站:socat

socat是一個多功能的網絡工具,名字來由是” Socket CAT”,可以看作是 netcat 的 N 倍加強版,socat 的官方網站: socat 。

Socat是一個兩個獨立資料通道之間的雙向資料傳輸的繼電器。這些資料通道包含檔案、管道、裝置(終端或數據機等)、插座(Unix,IP4,IP6 - raw,UDP,TCP)、SSL、SOCKS4用戶端或代理CONNECT。

Socat支援廣播和多點傳播、抽象Unix sockets、Linux tun/tap、GNU readline 和 PTY。它提供了分叉、記錄和程序間通信的不同模式。多個選項可用于調整socat和其管道,Socat可以作為TCP中繼(一次性或守護程序),作為一個守護程序基于socksifier,作為一個shell Unix套接字接口,作為IP6的繼電器,或面向TCP的程式重定向到一個串行線。

socat的主要特點就是在兩個資料流之間建立通道;且支援衆多協定和連結方式 ip,tcp,udp,ipv6,pipe,exec,system,open,proxy,openssl,socket等。

下載下傳socat源代碼包

Index of /socat/download

socat的基本用法

監聽端口:

socat tcp-l:12345 -

發送資料到端口:

echo xxx | socat - tcp:127.0.0.1:12345

其中tcp-l是tcp-listen的簡寫,tcp是tcp-connect的簡寫,簡寫後就不比nc長多少了。

udp: udp-listen, udp-connect

unix socket: unix-listen, unix-connect

unix datagram socket: unix-recvfrom, unix-sendto

發送檔案:

ip1 # socat -u open:a.txt tcp-listen:8888

ip2 # socat -u tcp:ip1:8888 open:a.txt,create

開telnet:

ip1 # socat tcp-listen:8888 exec:bash,pty,stderr

ip2 # socat readline tcp:ip1:888

端口轉發(好像是這樣,沒用過):

ip1(外網機器的内網位址) # socat tcp-listen:1234 tcp-listen:3389

ip2(内網機器) # socat tcp:ip1的外網位址:1234 tcp:ip1:3389

socat手冊部分

7.2.1 TCP TCP:: 目标機器host對應端口portTCP-LISTEN: 本機監聽端口。

7.2.2 UDP UDP:: 目标機器host對應端口portUDP-LISTEN: 本機監聽端口。

7.3.4 本地開啟端口

socat tcp-l:7777,reuseaddr,fork system:bash 同nc -l -p 7777 -e bash。

7.3.5 執行bash的完美用法

在目标上 socat tcp-l:8888 system:bash,pty,stderr 本地socat readline tcp:$target:8888 用readline替代-,就能支援曆史功能了。

在這個模式下的用戶端有本地一樣的效果

7.3.6 檔案傳遞

再看檔案傳遞的例子。nc也經常用來傳遞檔案,但是nc有一個缺點,就是不知道檔案什麼時候傳完了,一般要用Ctrl+c來終止,或者估計一個時間,用-w參數來讓他自動終止。用socat就不用這麼麻煩了:

on host 1: socat -u open:myfile.exe,binary tcp-listen:999

on host 2: socat -u tcp:host1:999 open:myfile.exe,create,binary

這個指令把檔案myfile.exe用二進制的方式,從host 1 傳到host 2。-u 表示資料單向流動,從第一個參數到第二個參數,-U表示從第二個到第一個。檔案傳完了,自動退出。

7.3.7 轉發

7.3.7.1 本地端口轉向遠端主機

socat TCP4-LISTEN:8888 TCP4:www.qq.com:80

如果需要使用并發連接配接,則加一個fork,如下

socat TCP4-LISTEN:8888,fork TCP4:www.qq.com:80

本地監聽8888端口,來自8888的連接配接重定向到目标www.qq.com:80

7.3.7.2 端口映射

再來一個大家喜歡用的例子。在一個NAT環境,如何從外部連接配接到内部的一個端口呢?隻要能夠在内部運作socat就可以了。

外部:

socat tcp-listen:1234 tcp-listen:3389

内部:

socat tcp:outerhost:1234 tcp:192.168.12.34:3389

這樣,你外部機器上的3389就映射在内部網192.168.12.34的3389端口上。

7.3.7.3 VPN

服務端

socat -d -d TCP-LISTEN:11443,reuseaddr TUN:192.168.255.1/24,up

用戶端

socat TCP:1.2.3.4:11443 TUN:192.168.255.2/24,up

7.3.8 重定向

socat TCP4-LISTEN:80,reuseaddr,fork TCP4:192.168.123.12:8080

TCP4-LISTEN:在本地建立的是一個TCP ipv4協定的監聽端口;

reuseaddr:綁定本地一個端口;

fork:設定多連結模式,即當一個連結被建立後,自動複制一個同樣的端口再進行監聽

socat啟動監聽模式會在前端占用一個shell,是以需使其在背景執行。

socat -d -d tcp4-listen:8900,reuseaddr,fork tcp4:10.5.5.10:3389 # 端口轉發 或者

socat -d -d -lf /var/log/socat.log TCP4-LISTEN:15000,reuseaddr,fork,su=nobody TCP4:static.5iops.com:15000 “-d -d -lf /var/log/socat.log”是參數,前面兩個連續的-d -d代表調試資訊的輸出級别,-lf則指定輸出資訊的儲存檔案。 “TCP4-LISTEN:15000,reuseaddr,fork,su=nobody”是一号位址,代表在15000端口上進行TCP4協定的監聽,複用綁定的IP,每次有連接配接到來就fork複制一個程序進行處理,同時将執行使用者設定為nobody使用者。 “TCP4:static.5iops.com:15000″是二号位址,代表将socat監聽到的任何請求,轉發到static.5iops.com:15000上去。

7.3.9 讀寫分流

socat還具有一個獨特的讀寫分流功能,比如: socat open:read.txt!!open:write.txt,create,append tcp-listen:80,reuseaddr,fork 這個指令實作一個假的web server,用戶端連過來之後,就把read.txt裡面的内容發過去,同時把客戶的資料儲存到write.txt裡面。”!!”符号使用者合并讀寫流,前面的用于讀,後面的用于寫。

7.3.10 通過openssl來加密傳輸過程

7.3.10.1 證書生成

FILENAME=server openssl genrsa -out $FILENAME.key 1024openssl req -new

-key $FILENAME.key -x509 -days

3653 -out $FILENAME.crtcat $FILENAME.key $FILENAME.crt >$FILENAME.pem 在目前目錄下生成 server.pem server.crt

7.3.10.2 使用

在服務端 socat openssl-listen:4433,reuseaddr,cert=srv.pem,cafile=srv.crt system:bash,pty,stderr

在本地 socat readline openssl:localhost:4433,cert=srv.pem,cafile=srv.crt

繼續閱讀