2013-03-10 2 views
4

Этот вопрос после этого один: Sockets working in openSUSE do not work in Debian?Netcat: используя пс -l PORT_NUMBER вместо н.д. -l -p port_number

При работе с сокетами на моей системе Debian, я должен использовать н.д. -l -p port_number в имитировать сервер, с которым я хочу поговорить. Если я использую nc -l port_number, он будет терпеть неудачу при использовании функции подключения сокета, и strerror (errno) скажет: «Соединение отказано».

Netcat без опции -p отлично работает в других дистрибутивах Linux, что я должен изменить в своей конфигурации?

ответ

4

Я согласен с duskwuff, что лучше всего использовать опцию -p везде, но ответить на ваш вопрос:

Единственное, что вам нужно сделать, это установить Netcat, который поддерживает синтаксис, который вы хотите. Я знаю, что пакет netcat-openbsd поддерживает его. Я знаю, что пакет netcat-traditional этого не делает. Также есть пакет netcat6, который также нет. Затем вы можете явно запросить версию OpenBSD из Netcat так:

nc.openbsd -l 4242 

При желании вы можете использовать систему альтернатив, чтобы установить эту версию Netcat для запуска при выдаче nc команду:

update-alternatives --set nc /bin/nc.openbsd 

Это будет производиться автоматически для вас, если это единственный netcat, который вы установили.

Наконец, вы также можете дополнительно удалить netcat, который вам не нравится (netcat-traditional или netcat6).

+0

Отличный ответ! Я буду использовать параметр -p, но я установил пакет netcat-openbsd для исправления проблем, связанных с netcat. Я пробовал netcat6, он должен просто добавить протокол IPv6 и повысить UDP в соответствии с man-страницей.Опция -p по-прежнему требуется с nc6, но явно говорит об этом: bapt @ debian: ~ $ nc6 -l 4242 nc6: в режиме прослушивания вы должны указать порт с ключом -p – baptx

+0

@baptx, спасибо за информацию о netcat6. Я добавил его к моему ответу. –

6

Не настраивайте свой набор. Существует множество реализаций netcat; не все они ведут себя одинаково.

В частности, «традиционная» версия netcat, которая, вероятно, вы установили в вашей системе Debian, в конечном итоге сделает что-то совершенно неожиданное, если вы опустите флаг -p («порт»): это будет обрабатывая последний аргумент как имя хоста, передайте его inet_aton(), который преобразует его в бессмысленный IP-адрес (например, 1234 станет 0.0.4.210), а затем продолжит игнорировать этот IP-адрес и прослушивать сокет с автоматически присвоенный (возможно, случайный) номер порта.

Такое поведение явно глупо, поэтому некоторые другие реализации netcat предполагают, что вы имели в виду -p. Однако тот, который вы используете, не передает опцию -p.

+0

Спасибо за объяснение, что это связано с моей реализацией системы. Я буду использовать опцию -p для указания порта. Я все еще хочу, чтобы эти проблемы были исправлены, поэтому я могу быть уверен, что в будущем не будет никаких сюрпризов. Вот почему я установил netcat-openbsd, и мне не нужно было настраивать свой набор, альтернативы обновлений автоматически переключились на nc.openbsd;) Кстати, кажется, что netcat-традиционный не поддерживает IPv6 – baptx

+0

cygwin имеет Реализация BSD nc (не уверен в версии), в которой говорится, что нельзя использовать -p с -l. Поэтому, наверное, вы не всегда можете сделать -p «безопасным» в смысле правильного использования .. »-p source_port Указывает, что порт источника nc должен использовать, .... Это ошибка , чтобы использовать эту опцию в сочетании с опцией -l . " – barlop

Смежные вопросы