Netcat
帶有設備或介面標誌的 Netcat?
Traceroute 有一個
-i
標誌,
-i
interface,--interface=interface
指定traceroute應該通過哪個介面發送數據包。預設情況下,根據路由表選擇介面。
ping
還提供了這個-I
。Netcat 沒有這樣的標誌。有一個簡單的解決方法nc
嗎?
netcat的一個很好的解決方法:
socat
。這個工具可以做任何netcat可以做的事情,甚至更多。在 Linux 上
socat
提供了與套接字選項so-bindtodevice=
匹配的選項。SO_BINDTODEVICE
例如,監聽綁定到介面veth0的 tcp 埠 4444 (強制作業系統使用與該介面相關的路由),其他選項類似於 using(OpenBSD 變體)
nc -k -l -p 4444
:socat tcp4-listen:4444,so-bindtodevice=veth0,reuseaddr,fork -
例如可以這樣檢查:
$ ss -tln sport == 4444 State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 5 0.0.0.0%veth0:4444 0.0.0.0:*
如果需要,也可以綁定為客戶端,如果使用兩個套接字作為參數,甚至可以以不同的方式綁定到左側套接字和右側套接字。
如果知道其他類似 *NIX 的作業系統上的其他等效套接字選項將實現相同的功能,並且
socat
沒有顯式實現它,那麼仍然可以使用泛型setsockopt
和setsockopt-listen
選項來啟動它(在從足夠的包括文件)。