Чи є спосіб дізнатися, коли Netcat робиться для передачі файлу між машинами?
Поточні команди:
Машина №2: nc -lp 5555 > test.txt
Машина №1: nc MachineIP Port < test.txt
Передача відбувається, але немає візуальних ознак того, що вона завершена.
Чи є спосіб дізнатися, коли Netcat робиться для передачі файлу між машинами?
Поточні команди:
Машина №2: nc -lp 5555 > test.txt
Машина №1: nc MachineIP Port < test.txt
Передача відбувається, але немає візуальних ознак того, що вона завершена.
Відповіді:
Існують різні версії nc
, як ви можете знайти на nc (1) - man man на сторінці Linux або nc (1) BSD General Commands Manual, з'єднання має відключитися відразу після передачі. На обох пов’язаних сайтах є приклад:
Почніть з використання nc для прослуховування на певному порту, з виводу, захопленого у файл:
$ nc -l 1234 > filename.out
За допомогою другої машини підключіться до процесу прослуховування nc, подаючи йому файл, який потрібно перенести:
$ nc host.example.com 1234 < filename.in
Після передачі файлу з'єднання автоматично закриється.
netcat
Після перенесення ваше з'єднання не припиняється, тому воно відрізняється від описаного вище. Він поводиться як мій, Netcat 1.10 на Debian Jessie. Така поведінка задокументована в /usr/share/doc/netcat-traditional/README.gz
(на моїй машині).
При найпростішому використанні "nc host port" створює TCP-з'єднання з даним портом на даному цільовому хості. Потім ваш стандартний вхід надсилається хосту, а все, що повертається через з'єднання, надсилається на ваш стандартний вихід. Це триває нескінченно, поки мережна сторона з'єднання не відключиться. Зауважте, що така поведінка відрізняється від більшості інших програм, які закривають усе та виходять після закінчення файлу на стандартному вході.
Ось міркування такої поведінки:
Ви можете запитати "чому б просто не використовувати telnet для підключення до довільних портів?" Дійсне питання, і ось деякі причини. У Telnet є проблема "стандартного вхідного EOF", тому потрібно вводити розраховані затримки в сценаріях керування, щоб дозволити завершення роботи мережі. Це основна причина, по якій netcat працює, поки мережа не закриється.
У Вікіпедії є збір різних реалізацій . Я не можу назвати відмінності. Може хтось ще може?
1
Ви можете сказати, nc
щоб вийти після того, як файл був прочитаний. Цей варіант корисний:
-q seconds after EOF on stdin, wait the specified number of seconds
and then quit. If seconds is negative, wait forever.
Якщо ви використовуєте цю команду для надсилання:
nc -q 0 MachineIP Port < test.txt
nc
завершиться 0 секунд після читання EOF, тобто відразу після закінчення файлу. Потім він вийде, і так закінчиться прийом nc
.
Якщо вам цікаво, що станеться, якщо пакети не потраплять, - ось коментар Юрая.
Коли всі пакети не трапляються, система виявить це і повторно передасть їх, не помічаючи програми (або, якщо це неможливо, програма отримає помилку тайм-ауту). Надійна доставка - це призначення протоколу TCP, наданого ядром ОС, яке
nc
використовує. Ви можете запитати протокол UDP, який цього не робить, використовуючи,nc -u
але це не так.
2
У згаданому вище є оригінальний приклад README.gz
, який ґрунтується на -w
тайм-ауті і не вимагає -q
можливості присутніх у вашій реалізації.
Netcat може використовуватися як простий агент передачі даних, і це неважливо, який кінець є слухачем і який кінець є клієнтом - вхід з одного боку надходить на інший бік як вихід. Корисно запустити слухача на приймальній стороні без вказаного часу, а потім надати стороні, що надсилає невеликий час очікування. Таким чином слухач залишається слухати, поки ви не зв’яжетеся з ним, і після того, як дані перестануть надходити, клієнт вимкне, вимкнеться та візьме слухача із собою. Якщо інтервенційна мережа не загрожує проблемами, це має бути повністю надійним, і ви завжди можете збільшити час очікування. Типовий приклад чогось "рш" часто використовується для: з одного боку,
nc -l -p 1234 | uncompress -c | tar xvfp -
а потім з іншого боку
tar cfp - /some/dir | compress -c | nc -w 3 othermachine 1234
буде переносити вміст каталогу з однієї машини на іншу, не турбуючись про файли .rhosts, акаунти користувачів або конфігурації inetd на будь-якому кінці.