Простий сервер Socket в Bash?


76

Чи є спосіб швидко прив'язатись до порту TCP / ip-адреси і просто роздрукувати всю інформацію в STDOUT? У мене є просте рішення для налагодження, яке пише речі в 127.0.0.1:4444, і я хотів би мати можливість просто прив'язати порт з bash і надрукувати все, що трапляється. Чи є простий спосіб це зробити?


Відповіді:


117
$ nc -k -l 4444 > filename.out

подивитися nc(1)


3
Будь-який спосіб зробити це, який не вимагає, щоб він працював у циклі, тобто прив’язувався до вбивства? Я неодноразово підключення і відключення до гнізда і ncштампах , якщо я не запустити його так: while true; do nc -l 4444; done.
Naftuli Kay

На деяких дистрибутивах вам потрібно буде змінити його на 'nc -k -l -p 4444'.
Ростислав Матль,

1
Якщо ви використовуєте ncat замість nc, ви можете мати кілька одночасних з'єднань, використовуючи той самий синтаксис.
Sietse van der Molen

2
так, використовуйте ncatзамість nc(воно поставляється в комплекті, nmapі це сучасне втілення nc)
Freedom_Ben

52

Тільки тому, що ви запитали, як це зробити bash, хоча netcatвідповідь дуже слушна:

  $ exec 3<>/dev/tcp/127.0.0.1/4444
  $ cat <&3

13
Але це не працює для прослуховування. Я не думаю, що можна слухати, використовуючи строго баш
Віджаендер

8
Це рішення дійсно вимагає сервера прослуховування. Bash не може зробити це за допомогою, /dev/tcpяк пояснено в unix.stackexchange.com/a/49947/13746
xebeche

1
Слухаєш? Для цього і потрібен xinetd! : D
Evi1M4chine

14

Це працює так, як ви очікували:

 nc -k -l 4444 |bash

а потім ти

echo "ls" >/dev/tcp/127.0.0.1/4444

тоді ви бачите список, виконаний bash.

[Коротке попередження про безпеку]
Звичайно, якщо ви залишите щось подібне на своєму комп’ютері, у вас буде широко відкритий шлюз для всіх видів атак, оскільки команди можуть надсилатися з будь-якого облікового запису користувача на будь-якому хості у вашій мережі. Це не реалізує жодної безпеки (автентифікація, ідентифікація) і надсилає всі передані команди незашифрованими по мережі, тому ними можна дуже легко зловживати.


Якщо у вас немає /dev/tcp, ви можете запустити:echo "ls" | nc 127.0.0.1 4444
fzbd

1
@fzbd: немає / dev / tcp. це спеціальний файл bash, тому lsне буде показувати його
Marcin Fabrykowski

@MarcinFabrykowski Правильно, але якщо ви запускаєте ці команди на інших оболонках, обробник недоступний. Він також може вийти з ладу, якщо ваш bash не скомпільований --enable-net-redirections.
fzbd

5

Додавання відповіді за допомогою ncat@Freedom_Ben натякало на:

ncat -k -l 127.0.0.1 4444

та пояснення варіантів від man ncat:

-k, --keep-open            Accept multiple connections in listen mode
-l, --listen               Bind and listen for incoming connections

ncatпоставляється nmapта підтримує паралельні з'єднання, тоді як застаріла ncкоманда ні.
Serge Stroobandt
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.