7/28/2008

Швейцарский нож для сетей - netcat

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

Утилита netcat (или nc) должна быть в любом дистрибутиве, и даже в Knoppix она тоже есть. Если вдруг её нет, установка netcat проблем не составляет:
apt-get install netcat
Работать с ней очень просто, и на примере далее я покажу, как легко и просто передавать файлы при помощи nc. Идея netcat очень проста: он просто перенаправляет поток данных в порт сетевого устройства, а на другом конце поток перенаправляется в файл. Отсюда и название: NETcat - тот же cat, но сетевой. При передаче файлов следует первым запускать nc на сервере (куда будут передаваться данные), а потом уже с клиента (откуда передаются данные) пересылать файлы.


На стороне сервера (куда передаём данные):
Нужно запустить netcat так, чтобы он слушал определённый порт, и перенаправлял получаемый поток в файл. Вот так:
nc -l -p 3333 > file.txt
Это откроет на прослушивание порт 3333, и сохранит полученные данные в файл file.txt в текущем каталоге. При этом программа не вернёт управление консоли, и будет ждать, пока вы вручную завершите её.


На стороне клиента (откуда передаются данные):
Для этого передаём по конвейеру файл nc так:
cat file.txt | nc 192.168.1.1 3333
Это передаст файл file.txt на машину с IP-адресом 192.168.1.1, где уже запущен nc, слушающий порт 3333.

А кроме того
Можно с помощью nc устроить чат с пользователем на другой машине. Со стороны клиента просто пишете
nc 192.168.1.1 3333
и на том конце будет видно всё, что вы печатаете, в том числе кириллицу.


Ссылки:
Первоначально идея была любезно утянута отсюда, разбавлена вот этим и приправлена вот этим материалом.

10 комментариев:

  1. Ух-ты! А я тут понимаешь с шеллом и форвардингом портов огород горожу...

    Так можно чаты какие нибудь устраивать, и даже целые конференции :)

    ОтветитьУдалить
  2. Сцылко только поправь http://iar.spb.ru/linux/network =))) Там ещё добавил как через tar и nc копировать много файлов за раз =)

    Ну и ещё уточнение. Как ни странно, в некоторых дистах в дефолтную систему netcat невключён. В дебианистых системах можно поставить: apt-get install netcat

    ОтветитьУдалить
  3. Есть ещё, кстати, отличная штука под именем dog.

    $ aptitude show dog

    Вот она чуть-чуть по-другому, но умеет и так, и стандартным котом отрабатывать и ещё немного разного.

    ОтветитьУдалить
  4. 2 librarian пишет...
    Ух-ты! А я тут понимаешь с шеллом и форвардингом портов огород горожу...
    А у меня этот пост лежал почти год :-/ Буду выкладывать раритетные вещи :-)

    Так можно чаты какие нибудь устраивать, и даже целые конференции :)
    Конечно, без проблем.

    2 Ivan A-R пишет...
    Сцылко только поправь
    Спасибо, поправил.

    Ну и ещё уточнение. Как ни странно, в некоторых дистах в дефолтную систему netcat невключён.
    В Дебиане и Кноппиксе оно есть. В Дебиане правда не поставлено по умолчанию.

    2 Roman Khimov пишет...
    Есть ещё, кстати, отличная штука под именем dog.
    Спасибо, Роман! Гляну.

    ОтветитьУдалить
  5. virens, вот и я про то, что не поставлено =) Утром торопился писал. Так что слог оставляет желать лучшего =))) В бубунтах разномастных вроде тоже надо ставить.

    ОтветитьУдалить
  6. А как я пойму что файл закончил отправку на клиенте?

    а то отправку запустил, а она так и висит

    ОтветитьУдалить
  7. vech, если по_man_ить netcat то найдётся ключик -q

    ОтветитьУдалить
  8. 2 Ivan A-R пишет...
    virens, вот и я про то, что не поставлено =)
    Про то, как поставить netcat, я написал позже.

    В бубунтах разномастных вроде тоже надо ставить.
    За убунты не в ответе, но в Debian надо ставить.

    Кстати, про ключик -q надо будет добавить в пост.

    ОтветитьУдалить
  9. Быстрый способ переливать файлы:

    откуда:
    cd /path/to/directory
    find|cpio -ov|nc -l -p 9999

    куда:
    cd /path/to/directory
    nc адрес 9999|cpio -idmv

    можно добавить сжатие по gzip/gunzip, но если сеть 100 Мбит/с - выгоды обычно не бывает

    вместо cpio можно использовать tar, но в нём я столкнулся с проблемой - криво копируются симлинки, указывающие на абсолютный путь

    ОтветитьУдалить
  10. это гениальная штука. спасибо за пост и комменты.

    ОтветитьУдалить