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
вариант.