Файловые менеджеры по умолчанию для среды рабочего стола 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 ". Это все!
Только что попробовал - немного отличается поведение netcat-openbsd
и netcat-Traditional
(ubuntu 16.4). Вариант OpenBSD делает то, что вы ожидаете, в то время как с традиционным netcat мне нужно добавить -q 1
, чтобы не ждать дополнительных данных.
echo 'test' | netcat -q 1 server 7
Ваша команда должна работать. Это очень похоже на некоторые примеры на странице руководства netcat
.
Именно так должен работать netcat
: как только он достигает EOF на стандартном вводе, он (в одностороннем порядке) закрывает соединение / с / сервером, а затем ожидает данных, поступающих с сервера. . Когда последний закрывает соединение (иначе: сервер-> клиент), netcat
останавливается.
Если ваша команда netcat
не завершается, я полагаю, что на сетевом уровне происходит что-то странное, что заставляет сервер echo
ожидать дополнительных входных данных.
Вы можете попробовать опцию -q
, чтобы заставить netcat
останавливать через N секунд после обнаружения EOF на стандартном вводе:
netcat -q1 server echo <<< "test"
( <<< "test"
- это bash
ism, используйте синтаксис echo ... |
, если вы не используете bash
)
Я неправильно понимаю ваш вопрос?
Прослушиватель netcat по умолчанию должен завершиться после получения ввода (в этом случае ваше эхо направляет его в netcat, который пересылает его слушателю).
Если вы хотите, чтобы прослушивающая служба Netcat продолжала слушать после получения входных данных:
nc -lk 12345
Но самое главное, пожалуйста, проверьте справочные страницы для netcat .. они удивительно полезны для всех команд ...
man nc
(echo 'test'; sleep 1) | netcat server 7
Это удерживает вход открытым в течение некоторого времени для задержки окончания netcat
.
На самом деле, лучший способ корректно закрыть соединение — отправить заголовок 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;
Я знаю, что это немного устарело, но ни один другой ответ не помог мне, и это помогло:
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.
Я просто проверяю команду timeout
при попытке выполнить команду nc
, например:
echo "test" | timeout 10 netcat server 7
Ожидание в течение 10 секунд перед закрытием соединения.