LINUX.ORG.RU

[bash[cui][netcat]dp2p

 


0

1
#!/bin/bash 
    echo " 
          dp2p v.0.1 
    ********************************************** 
    -d  принять файл 
    -u  отправить файл 
    **********************************************  
       Distributed under the GNU GPL 
          by Rafister 
    " 
while getopts "udh" optname 
  do 
    case "$optname" in 
      "u") 
echo "Введите IP адрес (разделяйте числа точкой):" 
read -a ipup 
echo "Введите адреса файлов и/или папок через пробел:" 
read -a fileup 
tar -czf $fileup | nc $ipup 8080 -q 1 | pv -cN "Отправка" 
    ;; 
      "d") 
echo "Куда сохранить файлы? Введите адрес папки:" 
read -a filedown 
cd $filedown 
echo "Ожидание подключения..." 
nc -l -p 8080 -q 1 | pv -cN "Загрузка" | tar xvz 
echo "Готово! Ваши файлы в пункте назначения ;)" 
cd ~ 
    ;; 
    "?") 
        echo "Неизвестная опция \"$OPTARG\". Чтобы посмотреть доступные опции, введите название скрипта без опций." 
    ;; 
    esac 
  done

Ваши пожелания / предложения по скрипту? Перед использованием, необходимо проверить наличие таких программ как: nc (netcat), tar, gzip, pv



Последнее исправление: rafister (всего исправлений: 2)

Ответ на: комментарий от Zhbert

допустим. хочешь передать васе пупкину порнушку, запускаешь скриптик с ключиком -u воодишь ип васи и все такое... а вася запускает у себя с ключом -d и ждет пока к нему я присоединюсь и передам порнушку. я создавал тред на эту тему уже.

rafister
() автор топика
Ответ на: комментарий от rafister

Не, я помню твой тред. Но это, я так понял, работать будет только в случае белого ипа или только в локалке, так?

Zhbert ★★★★★
()
Ответ на: комментарий от Zhbert

Да. Ну хз как у вас, в нашем маленьком городе (40к населения) основной провайдер (Сибирьтелеком) при заключении договора выдает белый ип каждому. Так что с этим проблем нет. Да и стоит он всего 100-200р в месяц.

rafister
() автор топика
Ответ на: комментарий от rafister

>в нашем маленьком городе (40к населения) основной провайдер (Сибирьтелеком) при заключении договора выдает белый ип каждому.

Ну тогда имеет смысл, да =)

Zhbert ★★★★★
()

Продублируюсь из удалённой темы.

read -a

Попробуйте не читать это интерактивно, а сделать параметром командной строки. Это позволит скрипту быть более гибким (его можно будет вызывать из других скриптов без помощи всяких костылей; отпадут проблемы с именами файлов, содержащими пробелы; можно будет пользоваться autocompletition).

cd

Да пусть пользователь просто перейдёт в нужную директорию перед запуском программы (а сам скрипт будет лежать где-либо в $PATH).

AITap ★★★★★
()
Ответ на: комментарий от AITap

Попробуйте не читать это интерактивно, а сделать параметром командной строки. >Это позволит скрипту быть более гибким (его можно будет вызывать из других >скриптов без помощи всяких костылей; отпадут проблемы с именами файлов, >содержащими пробелы; можно будет пользоваться autocompletition).

это как?о_О :)

rafister
() автор топика

На случай ошибки в имени каталога или адреса, я бы добавил в соответствующих строках || exit $?

K-Vrat
()

Я переписал твой скрипт на позиксный sh (тестировал под фряхой, соляркой, макосью и сигвином), плюс несколько расширил функционал и повысил юзабилити (нет необходимости указывать опции -i и -f, скрипт сам в состоянии догадаться что из его аргументов - файл или директория, а что - хостнейм или айпи-адрес.)

http://paste.pocoo.org/show/267454/

itakingiteasy
()
Ответ на: комментарий от itakingiteasy

С портабельностью облом получился: гунтый неткат не умеет -q; бсдшный неткат требует воркэраунда потому, что не принимает одновременно -p и -l. Пока максимум того, что у меня получилось: http://paste.pocoo.org/show/267464/

itakingiteasy
()
Ответ на: комментарий от rafister

host и hostx используются для отличия хостнейма от имени файла, в их отсутсвие можно использовать пинг, но лучше таки поставить host или hostx.

Вот апдейт, с применением пинга и возможностью игнорировать фатальные ошибки (-n): http://paste.pocoo.org/show/267508/

itakingiteasy
()
Ответ на: комментарий от itakingiteasy

Олсо, пинг некорректно работает с некоторым днс-серверами, которые заворачивают все неуспешные запросы на свой сайтик, например, OpenDNS.

itakingiteasy
()
Ответ на: комментарий от rafister

Было:
./dp2p -u
Введите IP адрес (разделяйте числа точкой): 192.168.1.23
Введите список файлов: «Длинное имя файла со всякими пробелами.txt» файл1 файл2 файл3
(куча ошибок «файл не найден»)

Стало:
./dp2p -u -a 192.168.1.23 — Длинное\ имя\ файла\ со\ всякими\ пробелами.txt файл1 файл2 файл3
(успешная передача)

AITap ★★★★★
()
Ответ на: комментарий от itakingiteasy
rafister@rascal ~ $ command -v -- host; echo $PATH
/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/i686-pc-linux-gnu/gcc-bin/4.4.4:/usr/sfw/bin
rafister@rascal ~ $ sh Desktop/dp2pv2.sh
/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/i686-pc-linux-gnu/gcc-bin/4.4.4:/usr/sfw/bin
rafister@rascal ~ $
rafister
() автор топика
Ответ на: комментарий от itakingiteasy
rafister@rascal ~ $ whereis host
host: /etc/host.conf
rafister@rascal ~ $ locate host
bash: locate: команда не найдена
rafister@rascal ~ $ sudo emerge locate
Пароль: 

 * IMPORTANT: 1 news items need reading for repository 'gentoo'.
 * Use eselect news to read news items.

Calculating dependencies... done!

emerge: there are no ebuilds to satisfy "locate".
(dependency required by "locate")

 * IMPORTANT: 1 news items need reading for repository 'gentoo'.
 * Use eselect news to read news items.

rafister@rascal ~ $ 
rafister
() автор топика
Ответ на: комментарий от itakingiteasy

Погуглил,утилита host находится в bind-tools. компиляю.

P.S.: лучше уж пинг чем хост, т.к. bind-tools весит немало(

rafister
() автор топика
Ответ на: комментарий от rafister

Ну так тогда что позвляет тебе утверждать, что она

есть. с ней тоже не работает.

есть.


?

itakingiteasy
()

я просто делал emerge host, думал оно.

rafister
() автор топика
Ответ на: комментарий от itakingiteasy

С пингом то все работает. А вот с host-ом я ошибся,да.

rafister
() автор топика
Ответ на: комментарий от rafister

Доступа во вконтактики у меня нету.

Жаббер есть: itakingiteasy@jabber.ru , но я им почти не пользуюсь. Но сегодня, ради исключения, буду.

itakingiteasy
()

Велосипеты наше всьо!

Еще можно убедиться, что есть команда scp и... не делать все остальное ;)

slackwarrior ★★★★★
()
Ответ на: комментарий от itakingiteasy

Респект!

>Прочитал бы тред сначала, я в своей релизации на превых строчках же говорю, что лучше использовать рсинк или ssh+scp :)

Добавь в скрипт текст GPL... Для респекту;)

slackwarrior ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.