The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Быстрая передача файла через псевдо-HTTP
Когда есть необходимость передать файл с одной машины на другую, 
а под рукой нет общедоступных ресурсов, можно сделать так:

    nc -l -p 8080 < file
или
    netcat -l 8080 < file

на клиенте достаточно в браузере набрать http://192.168.0.123:8080

Собственно, все. Впрочем, если получатель - блондинка, которая не знает команды
File-Save, можно написать так:

   (echo -e "HTTP/1.1 200\nContent-Disposition: attachment; 
   filename=gena_na.png\nContent-Type: application/octet-
   stream\nConnection: close\n"; cat vim_mrxvt.png ) | nc -vv -l -p 8080

Но это еще не все. Можно дать доступ к целой директории, написав простой HTTP сервер в одной строке:

   while true; do nc -vv -l -p 8080 -c '( read a b c; file=`echo $b | sed 's/[^a-z0-9.]//g'`; 
   if [ a$file = "a" ]; then ( ls | (while read f; do echo "<a href=$f>$f</a><br>"; done) ); 
   else cat $PWD/$file; fi )'; sleep 1; done

Этот скрипт отдает все файлы, которые есть в текущем каталоге и не позволяет его сменить. 
В случае, если запрашивается корневая директория, то управление передается 
своеобразному mod_index - т.е. выводится список файлов-ссылок. В конце добавлена задержка в 1 сек 
для того, чтобы была возможность убить его нажатием Ctrl-C.

См. подробнее http://alexey.sveshnikov.ru/blog/2006/12/23/http-сервер-размером-в-222-байта/
 
27.12.2006 , Автор: mahoro
Ключи: http, netcat / Лицензия: CC-BY
Раздел:    Корень / Программисту и web-разработчику / Shell / Готовые скрипты

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, I3rain (ok), 14:07, 27/12/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Хм классно. Нужно запомнить.
     
  • 1.2, Max (??), 16:15, 27/12/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    netcat -l 8080 < file

    Помоему не совсем правильно.

    netcat -l -p 8080 < file, так заработало...

     
     
  • 2.4, mahoro (?), 22:30, 27/12/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Да, действительно. Внес правку..
     

  • 1.3, Алек (?), 18:14, 27/12/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А что за netcat? У меню не находит такой команды :-(
     
     
  • 2.5, mahoro (?), 22:31, 27/12/2006 [^] [^^] [^^^] [ответить]  
  • +/
    http://netcat.sourceforge.net/
    man netcat, nc --help
     

  • 1.6, Zulu (?), 00:05, 28/12/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А зачем браузер?
    Я так всегда передаю:

    tar -c . | gzip | netcat host port
    <->
    netcat -lp port | gunzip | tar -x

     
     
  • 2.7, mahoro (??), 12:32, 28/12/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Это клево, если и там и там - advanced user и юникс. А на винду? )
     

  • 1.8, A (?), 13:26, 28/12/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А зачем брузер использовать? можно и оправлять, и получать nc :-)
    на принимающей машине: nc -l 9000 > file
    на отправляющей nc xx.xx.xx.xx 9000 < file
     
  • 1.9, Andriy (??), 21:54, 02/01/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    netcat'ом класно машины клонировать, Acronis'ы  и Ghost'ы спрячутся.
     
     
  • 2.12, mrvmrv (??), 15:25, 06/01/2007 [^] [^^] [^^^] [ответить]  
  • +/
    " netcat'ом класно машины клонировать, Acronis'ы  и Ghost'ы спрячутся. "

    Kakim OBRAZOM??? ESLI NE SECRET???
    SPASIBO!!!???!!!

     
     
  • 3.13, mahoro (??), 23:11, 06/01/2007 [^] [^^] [^^^] [ответить]  
  • +/
    dd if=/dev/hda | gzip | nc -vv remote.host 1234
    nc -vv -l -p 123 | gunzip | /dev/hda
    Примерно так.
    Только я бы вместо netcat использовал бы ssh..
     

  • 1.10, Veter (??), 22:53, 02/01/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Работает как-то странно. Передает или кусок файла (konqueror->kget), или не останавливается после окончания передачи (firefox). Похоже, надо еще Content-length отправлять.
     
  • 1.11, anonymous (??), 15:24, 05/01/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Super, TNX. Rabotaet, no tol'ko bez "-p"
    $ nc -l 8080 < file
    a vot optsii "-c" net (man smotrel).
    OS Fedora Core 4
    ne podskazhete kak obojti?
     
  • 1.14, Николай (??), 02:10, 08/01/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    tar -czpf - dir1 dir2 ... | ssh root@target 'tar -xzpf - -C /home'
    или наоборот:
    ssh user@source 'tar -czpf - dir1 dir2 -C /home' | tar -xzpf - -C /home
     
  • 1.15, dot22 (?), 10:56, 11/01/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Какое-то странное экранирование получается...
    Сейчас проверил - в директории, помимо других разных, лежит файлик Hi-NoteDB.pdb. Если другие файлы скачать/получить удается, то при обращении к этому файлу выводится ошибка:
    cat: /home/dot/tmp/install/iote.pdb: No such file or directory
    из-за чего такое может быть?
     
     
  • 2.16, dot22 (?), 11:07, 11/01/2007 [^] [^^] [^^^] [ответить]  
  • +/
    Заметил, что в выводе ошибки отсутствуют заглавные буквы. Переименовал файл в hi-notedb.pdb. Теперь другая ошибка:
    cat: /home/dot/tmp/install/hinotedb.pdb: No such file or directory

    Обратил внимание на следующий кусок скрипта:
    sed 's/[^a-z0-9.]//g'
    т.е. в именах файлов допустимы только строчные символы и цифры?
    Попробовал в этом куске заменить "а маленькое" на "А большое". Скрипт вообще сломался - листинг файлов выводит, но сами файлы не отдает, кроме того, в самом верху страницы выводится сообщение: sed: -e выражение #1, символ 15: Invalid range end

     
  • 2.17, dot22 (?), 11:22, 11/01/2007 [^] [^^] [^^^] [ответить]  
  • +/
    Еще заметил...
    Есть две машины
    - Debian/testing
    GNU bash, version 3.1.17(1)-release (i486-pc-linux-gnu)
    nc v1.10
    -CentOS release 4.4 (Final)
    GNU bash, version 3.00.15(1)-release (i686-redhat-linux-gnu)
    nc v1.10

    На первой машине скрипт работает нормально, на другой - nc ругается на неправильные опции:
    nc: invalid option -- c
    Версии nc одинаковые, но выводы по nc -h различаются. Так что, получается, такой скрипт может сработать не на всех дистрибутивах.

     

  • 1.18, Deepwalker (??), 10:44, 14/01/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Можно проще : ))
    python:
    from twisted.internet import reactor
    from twisted.web2 import server, static, channel, http
    PORT = 8081
    DIRECTORY = '/home/ftp/'
    s = server.Site(static.File(DIRECTORY))
    reactor.listenTCP(PORT, channel.HTTPFactory(s))
    reactor.run()
     
     
  • 2.21, piranha (??), 11:20, 24/01/2007 [^] [^^] [^^^] [ответить]  
  • +/
    Спасибо. ;)

    http://blog.piranha.org.ua/webdirpy/

     

  • 1.19, terr0rist (?), 14:57, 16/01/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >> nc -l -p 8080 < file
    Опция -р не нужна с -l (по крайней мере FreeBSD 6.1)
    nc -l 8080 < file
     
  • 1.20, skif (??), 16:47, 16/01/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    не пашет система freebsd 6.0

    nc: cannot use -p and -l
    если без -p
    то при соединении с другого компа выдает
    Host: 192.168.0.100:9000
    Connection: Keep-Alive
    и ничего не происходит

     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру