socat 實用網路工具 和 使用解析 unix socket 方法
最近要看 unix socket 傳送資料而苦惱
剛好最近這個工具通过tcpdump对Unix Domain Socket 进行抓包解析 | plantegg
就是要你懂Unix Socket 进行抓包解析 | plantegg
馬上實作看看!!!
簡單介紹
Socket cat 是一個比 netcat(nc) 強大工具。 nc 我沒怎麼使用過,不過直接先跳學 socat 使用好像也不錯,感覺比 nc 簡單。
首先怎麼抓到 unix socket
|
|
以下是我想的流程,未必正確
上方實作 socket ,正常流程
-
socket server 會做 等待接收資料(stdin)
client端: clinet socket (stdin) —> server socket (對 client 來說是 stdout,server 來說是 stdin) -
Server接到完資料,經過程式處理,會回傳資料到client
Server端: server socket (stdin) —> client socket (對 server 來說是 stdout,client 來說是 stdin)
所以正常應該會有來回資料
用上面方法,我發現 docker 怎麼沒有 docker 容器跑出來結果docker run ubuntu echo hello
經過一番測試
|
|
用以上參數可以正常看到執行結果,又在想他有做轉發應該都會來回,應該可以做顯示
發現多了-t100 -d -x -v
可以顯示結果
|
|
這樣就正常了
-t<timeout>
沒想到是跟這個有關係,設定-t100 就能顯示
When one channel has reached EOF, the write part of the other channel is shut down. Then, socat waits [timeval] seconds before terminating. Default is 0.5 seconds.
This timeout only applies to addresses where write and read part can be closed independently. When during the timeout interval the read part gives EOF, socat terminates without awaiting the timeout.
-v
http 的話可服選擇這種方式去顯示記錄
-x
也是顯示封包格式
相關指令
讀寫文件
|
|
我一直搞不懂 - 意思
不過 第二個 address 是 STDOUT 突然就好懂了
不知道-
是不是呼略的意思?
通常 socat [ option ] address1 address2
address1->address2
開 port 通訊
|
|
在服務端 7005 端口建立一個 Shell。
server
|
|
client
|
|
我的ubuntu 不能用 readline
問題: ubuntu下,按照官方文檔,客戶端執行socat readline tcp:serverip:12345,出現錯誤提示:socat[2067] E unknown device/address “READLINE”,本機上已經安裝readline相關庫。
文件傳送
服務端
socat -u open:filename,binary tcp-listen:12345
客戶端
socat -u tcp:serverip:12345 open:localfilename,create,binary
讀寫分離
socat支持打開端的讀寫分離,使用!!符號,左側表示讀,右側表示寫。
socat open:hello.html!!open:log.txt,create,append tcp-listen:12345,reuseaddr,fork
說明
open:hello.html 表示讀hello.html文件。
open:log.txt 表示收到的數據寫入log.txt文件。
reuseaddr 見socket的SO_REUSEADDR。
fork 請求到達時,fork一個進程進行處理。
在bash下,需要用\對!進行轉義。
通過 OPENSSL 加密傳送
|
|
client
|
|
憑證問題
如果出现异常 2016/12/15 17:49:50 socat[8259] E certificate is valid but its commonName does not match hostname
可使用 verify=0 关闭验证
或者添加 commonname
參考: 网络相关工具集
如何監聽 port 抓 GET POST 封包
Wireshark
http.request.method == “POST”
wireshark - Sniff HTTP packets for GET and POST requests from an application - Stack Overflow
tcpdump
過濾 GET 請求:
sudo tcpdump host 3sd.me and port 80 and ’tcp[((tcp[12:1] & 0xf0) » 2):4] = 0x47455420'
過濾 POST 請求:
sudo tcpdump host 3sd.me and port 80 and ’tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) » 2):4] = 0x504f5354)'
參考:
使用 wireshark 查看 tcpdump 的抓包結果 - Huang Huang 的博客
使用 tcpdump 抓取 POST 動作的 request 資料內容 | SSORC.tw
相關教學網站
- 用ssh和socat分分钟搞定Linux各种端口转发 - 知乎
- TCPDump Capture HTTP GET/POST requests - Apache, Weblogic & Websphere
- SOCAT 简介 - BrieflyX’s Base
- Socat 入门教程 - 运维之美
- socat - Cindy Sridharan - Medium
- socat使用笔记 - young525 - 博客园
- socat | 夢想家
- 依云’s Blog
- tcpdump 抓包使用小结 | HelloDog
查詢到工具
cat、netcat、rinetd、stunnel
這篇算沒整理很好
很多網頁都整理不錯
大神們真的很厲害
我只能跪了