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, 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? У меню не находит такой команды :-(
     
  • 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 O... весь текст скрыт [показать] [показать ветку]
     
     
  • 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:      
    Заголовок:
    Текст:



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