web-dev-qa-db-ja.com

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)への接続の入力をリッスンするためにソケットが開かれます。そして、明らかに私は反対側から接続してデータを送信することができます。

しかし、NATの背後にあるサーバーでDebian 8.0 Jessieを使用している場合、次の奇妙なエラーが発生しました。

$ 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サーバーの背後にあるものと関連している可能性がありますか?

8
logoff

リッスンモードのnetcatの場合、-pフラグを使用してリスニングポートを選択する必要があります。 nc -vvv -l -p 5349

2番目のエラー:nnetfd reuseport failed : Protocol not availableはSO_REUSEPORTソケットオプションに関連しています。 Linuxカーネルバージョン3.9で導入され、それを使用するnetcatバージョンは以前のカーネルリリースでは動作しません。カーネルをより新しいバージョンにアップグレードするか、別のバリエーションのnetcatを使用できます。 netcat-openbsdが動作するはずです。

7
DukeLion