Я хочу, щоб ехо-сервер UDP отримував пакети та відповідав саме на те, що він отримав. Як я можу просто зробити це за допомогою netcat
або socat
? Він повинен залишатися живим назавжди і обробляти пакети, що надходять від кількох хостів.
Я хочу, щоб ехо-сервер UDP отримував пакети та відповідав саме на те, що він отримав. Як я можу просто зробити це за допомогою netcat
або socat
? Він повинен залишатися живим назавжди і обробляти пакети, що надходять від кількох хостів.
Відповіді:
Іншим інструментом, що нагадує мережу, є версія nmap ncat
, яка має багато вбудованих приємностей для спрощення таких речей. Це спрацювало б:
ncat -e /bin/cat -k -u -l 1235
-e означає, що він виконує / bin / cat (відкликати назад те, що ви вводите)
-k означає, що продовжуйте жити, що він продовжує слухати після кожного з'єднання
-u означає udp
-l 1235 означає, що він слухає на порту 1235
Раніше я socat -v PIPE udp-recvfrom:5553,fork
запускав сервер і socat - udp:localhost:5553
для клієнтів.
Це була чудова допомога!
socat TCP4-LISTEN:2000,fork EXEC:cat
Ви також можете використовувати socat (а не використовувати netcat) як ехо-сервер і netcat як клієнт.
Ec-сервер Socat (слухає TCP-порт 1234):
socat -v tcp-l:1234,fork exec:'/bin/cat'
Клієнт Netcat (підключається до serverip на порті TCP 1234):
nc serverip 1234
Ви можете написати програму C, яка розщедриться, nc -u -l -p 4321
а потім використовує dup (2) для підключення:
Потім у нескінченному циклі батько читає з stdin і пише в stdout все, що читає батько.
socat -v PIPE UDP-LISTEN:5555,fork
, але в другому з'єднанні відмовляються. До речі, він прекрасно працює з TCP-LISTEN. Я уникаю кодування, інакше я міг би все це записати в C.
Якщо ви працюєте в Windows і використовуєте середовище, подібне unix, як cygwin, netcat migth не надає параметр -e. Це працювало для мене просто чудово.
netcat
рішення, попередньо встановлене в Ubunutu
netcat
Попередньо встановлено в Ubuntu 16.04 поставляється з netcat-openbsd
, і не мають -c
опцій, але керівництво дає рішення:
sudo mknod -m 777 fifo p
cat fifo | netcat -l -k localhost 8000 > fifo
Тоді приклад клієнта:
echo abc | netcat localhost 8000
TODO: як змінити значення вхідного рядка? Наступне не дає жодної відповіді:
cat fifo | tr 'a' 'b' | netcat -l -k localhost 8000 > fifo
Приклад віддаленої оболонки, однак, працює:
cat fifo | /bin/sh -i 2>&1 | netcat -l -k localhost 8000 > fifo
Я не знаю, як просто розібратися з одночасними запитами.