Netcat

帶有設備或介面標誌的 Netcat?

  • August 4, 2021

Traceroute 有一個-i標誌,

-iinterface,--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沒有顯式實現它,那麼仍然可以使用泛型setsockoptsetsockopt-listen選項來啟動它(在從足夠的包括文件)。

引用自:https://unix.stackexchange.com/questions/663149