Netcat: использование nc -l номер_порта вместо nc -l -p номер_порта

Этот вопрос следует за этим: Сокеты, работающие в openSUSE, не работают в Debian?

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

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

2 ответа

Решение

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

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

nc.openbsd -l 4242

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

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

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

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

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

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

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

Другие вопросы по тегам