Когда есть необходимость передать файл с одной машины на другую,
а под рукой нет общедоступных ресурсов, можно сделать так: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://connection-refused.blogspot.com/2006/12/http-222.html
URL:
Обсуждается: http://www.opennet.me/tips/info/1352.shtml
Хм классно. Нужно запомнить.
netcat -l 8080 < fileПомоему не совсем правильно.
netcat -l -p 8080 < file, так заработало...
Да, действительно. Внес правку..
А что за netcat? У меню не находит такой команды :-(
http://netcat.sourceforge.net/
man netcat, nc --help
А зачем браузер?
Я так всегда передаю:tar -c . | gzip | netcat host port
<->
netcat -lp port | gunzip | tar -x
Это клево, если и там и там - advanced user и юникс. А на винду? )
А зачем брузер использовать? можно и оправлять, и получать nc :-)
на принимающей машине: nc -l 9000 > file
на отправляющей nc xx.xx.xx.xx 9000 < file
netcat'ом класно машины клонировать, Acronis'ы и Ghost'ы спрячутся.
" netcat'ом класно машины клонировать, Acronis'ы и Ghost'ы спрячутся. "Kakim OBRAZOM??? ESLI NE SECRET???
SPASIBO!!!???!!!
dd if=/dev/hda | gzip | nc -vv remote.host 1234
nc -vv -l -p 123 | gunzip | /dev/hda
Примерно так.
Только я бы вместо netcat использовал бы ssh..
Работает как-то странно. Передает или кусок файла (konqueror->kget), или не останавливается после окончания передачи (firefox). Похоже, надо еще Content-length отправлять.
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?
tar -czpf - dir1 dir2 ... | ssh root@target 'tar -xzpf - -C /home'
или наоборот:
ssh user@source 'tar -czpf - dir1 dir2 -C /home' | tar -xzpf - -C /home
Какое-то странное экранирование получается...
Сейчас проверил - в директории, помимо других разных, лежит файлик Hi-NoteDB.pdb. Если другие файлы скачать/получить удается, то при обращении к этому файлу выводится ошибка:
cat: /home/dot/tmp/install/iote.pdb: No such file or directory
из-за чего такое может быть?
Заметил, что в выводе ошибки отсутствуют заглавные буквы. Переименовал файл в 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
Еще заметил...
Есть две машины
- 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 различаются. Так что, получается, такой скрипт может сработать не на всех дистрибутивах.
Можно проще : ))
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()
Спасибо. ;)
>> nc -l -p 8080 < file
Опция -р не нужна с -l (по крайней мере FreeBSD 6.1)
nc -l 8080 < file
не пашет система freebsd 6.0nc: cannot use -p and -l
если без -p
то при соединении с другого компа выдает
Host: 192.168.0.100:9000
Connection: Keep-Alive
и ничего не происходит