netcat: send text to echo service, read reply then exit

Файловые менеджеры по умолчанию для среды рабочего стола Gnome и KDE могут легко получить доступ к общим ресурсам Windows с помощью протокола SMB.
Вам не нужно устанавливать сервер Samba на хост-машине Linux , потому что Windows O.S. уже идет со встроенными протоколами связи самбы.

Допустим, ваш гость О.С. это « Windows XP », например, выберите папку, к которой вы хотите предоставить общий доступ, или просто создайте ее для этой цели, например "hostshare" и щелкните его правой кнопкой мыши -> " свойства " -> " общий доступ " Вкладка -> ] выберите: « Поделиться этой папкой в ​​сети » и « Разрешить сетевому пользователю изменять мои файлы ».

На этом этапе убедитесь, что брандмауэр Windows предоставляет доступ к общим файлам и ресурсам принтера. Перейдите в « меню запуска » -> « настройки « -> » Панель управления » -> " брандмауэр Windows " -> " Исключения " Вкладка -> выберите: -> " Файл и общий доступ к принтеру ».

Убедитесь, что хост-машина Linux видна гостю Windows V.M. через сеть. Итак, из командной строки Windows введите: ping 10.0.0.12 , где в данном случае (в качестве примера) «10.0.0.12» - это IP-адрес хоста; вы должны изменить его на свой собственный. Если у вас нет ответов эха, вам придется заняться устранением неполадок.
И сделайте то же самое из командной строки Linux: ping -c3 192.168.122.216 , где эти числа (в качестве примера) принадлежат виртуальному IP-адресу, назначенному гостевому виртуальному компьютеру; вы должны изменить его на свой собственный.

Чтобы получить IP-адрес Windows, выполните следующую команду: ipconfig

Чтобы получить IP-адрес Linux, выполните следующие команды:

$ ifconfig
$ ip a
$ ip r
$ hostname -I
$ hostname -i

На хост-машине Linux откройте « Nautilus » и перейдите в « Файл » -> « Подключиться к серверу » -> В поле типа « Адрес сервера » : smb: //192.168.122.216 -> « Connect ».
Откроется окно Nautilus с доступными для просмотра ресурсами вашего встроенного в Windows сервера Samba. Вы сможете увидеть и получить доступ к содержимому папки Windows " hostshare ". Это все!

8
22.12.2016, 15:10
7 ответов

Только что попробовал - немного отличается поведение netcat-openbsd и netcat-Traditional (ubuntu 16.4). Вариант OpenBSD делает то, что вы ожидаете, в то время как с традиционным netcat мне нужно добавить -q 1 , чтобы не ждать дополнительных данных.

echo 'test' | netcat -q 1 server 7
13
27.01.2020, 20:09

Ваша команда должна работать. Это очень похоже на некоторые примеры на странице руководства netcat .

Именно так должен работать netcat : как только он достигает EOF на стандартном вводе, он (в одностороннем порядке) закрывает соединение / с / сервером, а затем ожидает данных, поступающих с сервера. . Когда последний закрывает соединение (иначе: сервер-> клиент), netcat останавливается.

Если ваша команда netcat не завершается, я полагаю, что на сетевом уровне происходит что-то странное, что заставляет сервер echo ожидать дополнительных входных данных.

Вы можете попробовать опцию -q , чтобы заставить netcat останавливать через N секунд после обнаружения EOF на стандартном вводе:

netcat -q1 server echo <<< "test"

( <<< "test" - это bash ism, используйте синтаксис echo ... | , если вы не используете bash )

6
27.01.2020, 20:09

Я неправильно понимаю ваш вопрос?

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

Если вы хотите, чтобы прослушивающая служба Netcat продолжала слушать после получения входных данных:

nc -lk 12345
  • где 12345 - номер порта

Но самое главное, пожалуйста, проверьте справочные страницы для netcat .. они удивительно полезны для всех команд ...

man nc
3
27.01.2020, 20:09
(echo 'test'; sleep 1) | netcat server 7 

Это удерживает вход открытым в течение некоторого времени для задержки окончания netcat.

-1
27.01.2020, 20:09

На самом деле, лучший способ корректно закрыть соединение — отправить заголовок Content-Length, как показано ниже. Клиент (, как и curl, закроет соединение после получения данных.

DATA="Date: $(date)"; 
LENGTH=$(echo $DATA | wc -c);
echo -e "HTTP/1.1 200 OK\nContent-Length: ${LENGTH}\n\n${DATA}" | nc -l -p 8000;
0
27.01.2020, 20:09

Я знаю, что это немного устарело, но ни один другой ответ не помог мне, и это помогло:

echo 'test' | netcat -N $server $port

Обратите внимание на-N:

shutdown the network socket after EOF on the input. Some servers require this to finish their work.

У меня работало как на Windows, так и на Linux.

6
27.01.2020, 20:09

Я просто проверяю команду timeoutпри попытке выполнить команду nc, например:

echo "test" | timeout 10 netcat server 7

Ожидание в течение 10 секунд перед закрытием соединения.

0
27.01.2020, 20:09

Теги

Похожие вопросы