Может ли netcat прослушивать порт удаленного компьютера?

Я передаю вывод моего скрипта на локальный порт в моей системе, а именно -

$python script.py | нк 127.0.0.1 8033

Предположим, что у моего компьютера ip 10.0.0.3.

Теперь, возможно ли, что какой-то другой компьютер (скажем, IP 10.0.0.4) может прослушивать этот порт через nc или что-то еще. Пожалуйста, предложите.


person Sushant Khurana    schedule 02.11.2011    source источник


Ответы (2)


Не напрямую. Программа, прослушивающая порт, должна находиться на локальном компьютере (в вашем примере это 10.0.0.3). Вы можете настроить программу на локальном компьютере для прослушивания и отправки информации на другой компьютер, но соединение через сокет может быть установлено только на хосте.

person Jonathan Leffler    schedule 02.11.2011
comment
Спасибо, Джонатан, я попробовал это, прежде чем поднимать вопрос. Есть ли что-то еще, кроме netcat, которое могло бы прослушивать удаленные порты? Спасибо за вашу помощь. - person Sushant Khurana; 02.11.2011
comment
Нет - конструкция сокетов такова, что ваша программа должна быть на той машине, где вы хотите ее открыть. - person Jonathan Leffler; 02.11.2011
comment
Если ваша машина находится в подсети в качестве удаленной машины, вы можете использовать что-то вроде WireShark для наблюдения за прохождением пакетов. Но в наши дни большинство сетей коммутируются, а это означает, что ваша машина будет получать только те пакеты, которые явно адресованы ей (и широковещательные пакеты), что делает невозможным прослушивание другого компьютера. Вы должны попробовать и посмотреть. - person David Given; 02.11.2011

Я использую Perl именно для этого — вы, конечно, можете использовать python.

В Perl я использую библиотеку IO::Socket::INET.

Я создаю новый экземпляр INET с IP, port и Protocol и тайм-аутом для comms. Затем я использую метод recv для чтения данных из этого сокета.

Это не так просто, как nc; Я бы хотел, чтобы NC сделал это - было бы намного проще :)

Вот схема фактического Perl


my $data;
my socket;

$socket=IO::Socket::INET->new( PeerAddr => 10.0.0.3, PeerPort-> 8033, Proto => "tcp", Timeout => 1 ) or die "Unable to open port";

$socket->recv($data,bytes_to_read); # Put your chosen read size in stead of bytes_to_read
print $data;

person KayCee    schedule 18.06.2013