Netcat 無法綁定偵聽套接字

Netcat 無法綁定偵聽套接字

在我的 Ubuntu 14.04 計算機上,我可以執行以下操作:

$ nc -l 5349 -vvv
Listening on [0.0.0.0] (family 0, port 5349)

或這個:

$ nc -vvv -l 192.168.254.96 5349
Listening on [192.168.254.96] (family 0, port 5349)

並且開啟一個套接字來偵聽我的本機 IP 位址 (192.168.254.96) 上的輸入連線。顯然我可以從另一端連接並傳輸資料。

但是在 Debian 8.0 Jessie 的 NAT 後面的伺服器中,我遇到了這個奇怪的錯誤:

$ nc -vvv -l 5349
5349: inverse host lookup failed: Unknown host
nnetfd reuseport failed : Protocol not available
listening on [any] 38541 ... : Protocol not available

或者:

$ nc -vvv -l 10.1.6.189 5349
10.1.6.189: inverse host lookup failed: Unknown host
nnetfd reuseport failed : Protocol not available
listening on [any] 52606 ... : Protocol not available

該連接埠未被使用:

$ ss -tnl | grep 5349
(empty)

這是正確的 IP 位址:

$ ip addr list
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 1e:89:93:f1:96:a4 brd ff:ff:ff:ff:ff:ff
    inet 10.1.6.189/19 brd 10.1.31.255 scope global eth0
    inet6 fe80::1c89:93ff:fef1:96a4/64 scope link 
       valid_lft forever preferred_lft forever

可能是什麼問題?可能與伺服器後面的 NAT 有關嗎?

答案1

對於偵聽模式下的 netcat,您應該使用-p標誌來選擇偵聽端口,例如nc -vvv -l -p 5349

第二個錯誤:nnetfd reuseport failed : Protocol not available 與SO_REUSEPORT套接字選項有關。它是在 Linux 核心版本 3.9 中引入的,使用它的 netcat 版本不適用於早期的核心版本。您可以將核心升級到更新版本或使用 netcat 的其他變體。我相信 netcat-openbsd 應該可以工作。

相關內容