Netcat отримує лише частину файлу


1

Я посилаю файл з cat file1 | nc ip-address port і отримати його з nc -l port > file2 і отримати файл вирізати. Розмір отриманого файлу становить 28467200 байтів (прибл. 28М) з прибл. 150M.

uname -a
Linux MyName 3.13.0-107-generic #154-Ubuntu SMP Tue Dec 20 09:57:27 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

На інших Linux у мене (Loki в VirtualBox всередині Windows7) це обмеження недоступне.

uname -a
Linux Loki-VirtualBox 4.4.0-57-generic #78-Ubuntu SMP Fri Dec 9 23:50:32 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

Я також використовував інше програмне забезпечення як відправляючу сторону з таким же результатом, тому я звинувачую приймаючу частину.

У Wireshark я бачу (FIN, ACK) прапор, який робить з'єднання закритим, але я не можу знайти ніякої причини для цього.

Що може бути причиною такої поведінки?

EDIT: У разі використання nc -l port > filename Я отримую 28M даних, але якщо використовую nc -l port > filename < /dev/null, Я отримую 26 КБ даних (з цього питання: Надсилання файлу через netcat ). Чи пов'язана ця поведінка?


Скільки не вистачає? Звідки - початок, кінець, один або кілька випадкових блоків?
AFH

Я отримую завжди близько 28M. Зразки файлів набагато більші, приблизно 150M. Я отримую тільки початок файлу.
avp

Це схоже на мережеву проблему stderr на кожному кінці і перевірте, чи є щось у журналах помилок. Також спробуйте передати як відправника, так і приймача на локальному комп'ютері, використовуючи 127.0.0.1 як IP-адреса відправника. До речі, ніколи не використовуйте cat file | program ... - завжди використовуйте набагато ефективніше program <file ....
AFH

Так, я вже перевірив локальний хост, це не має значення. Тільки той ПК, тільки той nc (або система, що завгодно) має це обмеження. Для stderr я не отримав ідею. Я нічого не бачу в терміналі. ІМХО там виводиться вихід stderr, чи не так? Я маю на увазі, що труба перенаправляє тільки stdout, stderr буде видно. Я помиляюся?
avp

Я не був упевнений, як ви отримуєте доступ до віддаленої системи або контролюєте її, тому я не був упевнений, що ви побачите stderr повідомлень. Коли ви говорите, що використовуєте localhost не має значення, ви маєте на увазі, що відбувається одна й та ж помилка? На обох системах? Ви намагалися відправити файл подібного розміру в інший спосіб?
AFH

Відповіді:


2

Ви отримуєте файл неправильно.

Ви повинні послухати його

nc -l -p port > file2

І відправити його з

cat file1 | nc ip port

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