Linux за българи: Форуми

Linux секция за начинаещи => Настройка на програми => Темата е започната от: 4096bits в Mar 11, 2015, 14:06



Титла: wget и ddns
Публикувано от: 4096bits в Mar 11, 2015, 14:06
Направих си акаунт в noip.com и си създадох хост. Искам да мога да споделям една папка където и да се намирам без да трябва да търся WAN IP-то и да го пращам на този и онзи.
Папката я споделям просто като пусна http.server модула на python в директорията ѝ.
Та на въпросния сайт към настройките на хоста има Port 80 Redirect и там задавам 8000, който си се отваря по подразбиране като пусна питончето.
Така давам само адреса, без да трябва да добавям и порта към него.
Обачеее, като се пусне wget -rp за да се издърпа всичко, което съм споделил там, се сваля само index.html, robots.txt и нещо наречено KHgKKjl_popupgoogle.html.
А това не ми трябва да се сваля, а файловете в папката.


Титла: Re: wget и ddns
Публикувано от: neter в Mar 11, 2015, 14:25
Ако файловете, които искаш да свалиш, не са описани в домашната страница (била тя създадена от теб или автоматично генериран индекс) на папката или в някой файл/страница, към който/която могат да отведат линковете от домашната страница, то wget ще трябва да хвърля боб, за да разбере за тях и да ги изтегли. Флагът за рекурсивно сваляне все още не врачува ;)


Титла: Re: wget и ddns
Публикувано от: 4096bits в Mar 11, 2015, 15:06
Ами когато пусна
python -m http.server
и в браузъра напиша айпито ми и 8000
предполагам, че модулчето на питон си генерира страницата и няма проблем. Добавял съм линк към друга папка, в друг дял и си го захапва също. В движение.
Сега пуснах една проба с айпито ми и порта и wget рекурсивно дръпна всичко. Обаче, ако направя същото и вместо айпи и порт дам на wget само host.ddns.net, не се получава.
Не се получава и, ако дам на wget и host.ddns.net:8000.
Та това Port 80 Redirect ли пречи или какво.
Питона си генерира страницата и файловете.


Титла: Re: wget и ddns
Публикувано от: neter в Mar 11, 2015, 15:31
Да, сега видях, че то по подразбиране си създава индексна страница, ако няма ръчно създадена такава, така че wget знае за файловете.
Какво се случва, ако на wget подадеш IP-то и порт 80 (или без порт)? Ако успее, значи не е от препращането. Дали командата:
Код:
host host.ddns.net
ти връща твоето IP? Ако не, значи имаш проблем с ddns услугата (не е коректно настроена или все още не се е обновил DNS кешът в DNS сървърите, които ползваш). Ако wget с подадено IP и порт 80 не успее, тогава може и да е от препращането. Покажи точно как го задаваш!


Титла: Re: wget и ddns
Публикувано от: 4096bits в Mar 11, 2015, 16:01
 Не е от обновяването на сървърите им. Вчера си направих хоста и днес за проба гледам, какво става. Още не съм мърдал никъде по-далеч от обхвата на домашния ми рутер. Та host си дава точния адрес. Клиента съм го нагласил през две минути да им праща инфо за текущото WAN IP.
Ако подам айпито и порт 80 също не става нищо. Между другото, за да пусна python -m http.server 80 ми иска права, докато за порт 8000 или някой друг не пищи.


Титла: Re: wget и ddns
Публикувано от: neter в Mar 11, 2015, 16:11
Между другото, за да пусна python -m http.server 80 ми иска права, докато за порт 8000 или някой друг не пищи.
Нормално - портовете до 1024 са резервирани за системни процеси и обикновените потребители нямат права да ги пипат.

Та... дай да видим как правиш пренасочването. Ще е добре да видим и какво точно си вписал в http.server и каква е версията на твоя python (макар че последното донякъде може да се познае от кода във файла).


Титла: Re: wget и ddns
Публикувано от: 4096bits в Mar 11, 2015, 18:11
Между другото, за да пусна python -m http.server 80 ми иска права, докато за порт 8000 или някой друг не пищи.
Нормално - портовете до 1024 са резервирани за системни процеси и обикновените потребители нямат права да ги пипат.

Та... дай да видим как правиш пренасочването. Ще е добре да видим и какво точно си вписал в http.server и каква е версията на твоя python (макар че последното донякъде може да се познае от кода във файла).
Така, не зная, какво има във http.server защото това е модул към  python3, за python 2.x същия модул се нарича SimpleHTTPServer. Нормално разбира се трябва публичен адрес и в терминала, в желаната директория се пише само python3(2) -m http.server(SimpleHTTPServer) и въпросната папка и всичкото и съдържание до последното файлче надолу по дървото е достъпно през интернет на адрес публичното-IP:8000. Така вместо да пращам файлове през разни простотии като Skype, просто си пускам тоя елементарен wеb сървър. Това си е вградено в python и аз не се грижа за нищо. Нормално wget може да вземе всичко вътре рекурсивно. Обаче в този сайт дето се регнах, направих си хост, дръпнах един клиент, казах му през две минути да праща на сайта публичния ми адрес, за да може те да си обновяват кеша и там записите за хоста дето съм направил при тях и така. Домейн не съм регистрирал и не ми и трябва, защото това са ми нуждите засега. Да дам един нормално изглеждащ web адрес и да може някой да дръпне от мен, каквото му сложа в папката. Или линк там, до други места, да не копирам съдържание като идиот.

Та сега пробвах, да напиша уеб адреса, но за да стане рекурсивното изтегляне, трябва да добавя порт. А не искам.
Хоста е wavic.ddns.net. Когато дам на wget само това, не става рекурсивното теглене. С добавянето на порт 8000 бачка. Ама искам само с адреса да се получи.
В сайта към "настройките" на хоста wavic има това Port 80 Redirect, ама не зная, що нещо не се получава това, което очаквам.



Титла: Re: wget и ddns
Публикувано от: k0tka в Mar 11, 2015, 18:47
Имам едно предположение, можеш ли да провериш дали рутера ти поддържа ddns? Аз също използвам no-ip, който фактически работи с клиент от самият рутер, от там вече с нат препращам към вътрешни ip-та и портове.


Титла: Re: wget и ddns
Публикувано от: neter в Mar 11, 2015, 19:10
Ахааа... друго си е с такъв пример :) Към wget си добави флага
Цитат
-H,  --span-hosts                go to foreign hosts when recursive.
При пренасочването не ти сменят само порта, а направо те пращат към IP-то, което се явява външен за заявката хост и е нужен този флаг, за да се даде позволение на wget да отиде към него.

Гледам, че командата host връща друго IP (на машина на no-ip), а не твоето. Одеве, като те питах за нея, в заблуждение ли ме хвърли, или при теб host командата си връща твоето IP (може би заради някаква връзка с клиента на машината)?

Одеве те питах за кода на сървъра, понеже аз за проба го пусках със следния код (извадено от документацията):
Код
GeSHi (Python):
  1. import SimpleHTTPServer
  2. import SocketServer
  3.  
  4. PORT = 8000
  5.  
  6. Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
  7.  
  8. httpd = SocketServer.TCPServer(("", PORT), Handler)
  9.  
  10. print "serving at port", PORT
  11. httpd.serve_forever()
Сега установявам, че явно е нужен само при желание за допълнителни опции, вписани на едно място, вместо в командата за пускане, но можело и по-просто :)


Титла: Re: wget и ddns
Публикувано от: 4096bits в Mar 11, 2015, 19:36
Ами от python не разбирам. За мое съжаление.
Иначе host ми върна моето IP.
Аз пробвах с -H ( --span-hosts ), ако ти кажа какво стана, направи ми призля. Започна да сваля къде какво намери от външни сайтове. Като се започне от това дето ми е на машината, два файла споделих и натам започна noip, facebook, google, каквото докопа като връзки. Не знаех дали изобщо се спре. Ако не бях натиснал ctrl+c сигурно щеше да свали всичкото индекс на google :D
Някъде другаде се спомена за -H, като търсих преди това за решаване на тоя въпрос.

Дано да слушаш такава музичка.  ;)


Титла: Re: wget и ddns
Публикувано от: neter в Mar 12, 2015, 00:24
Еее, ти хептен се оставяш да готованство. Прегледа ли целия "--help" дали ще намериш други, интересни за теб, флагове? Как ти се струва този
Цитат
-D,  --domains=LIST              comma-separated list of accepted domains.
Вписваш в него IP-то си (домейна няма нужда да го описваш, понеже е начален хост) и така единственият външен за заявката хост, от който wget ще изтегли файлове, ще бъде твоята машина.

Къде ги търсиш тези решения? При подобни случаи първите неща, които трябва да прочетеш, са "команда --help" и "man команда", и чак след това да помислиш за заравяне в Мрежата.


Титла: Re: wget и ddns
Публикувано от: 4096bits в Mar 12, 2015, 11:56
Еее, ти хептен се оставяш да готованство. Прегледа ли целия "--help" дали ще намериш други, интересни за теб, флагове? Как ти се струва този
Цитат
-D,  --domains=LIST              comma-separated list of accepted domains.
Вписваш в него IP-то си (домейна няма нужда да го описваш, понеже е начален хост) и така единственият външен за заявката хост, от който wget ще изтегли файлове, ще бъде твоята машина.

Къде ги търсиш тези решения? При подобни случаи първите неща, които трябва да прочетеш, са "команда --help" и "man команда", и чак след това да помислиш за заравяне в Мрежата.
Ако трябва да описвам IP-то си, то няма смисъл, защото нали идеята е това. Моето IP си го зная, но нали като ида другаде и трябва да пратя на някого файлове, трябва да му казвам IP-то там. Нали е затова този домейн. Да мога да кажа на някого само него и където и да се намирам, през него да се свързват с машината ми.
Neter, а няма ли възможност просто да пренасоча заявки към моя порт 80 към 8000 или там който съм задал с питона? С iptables или нещо такова. Eто го това, дето мисля, че ми се бърка нещо. Това им го пише на сайта и е едно радиобутонче.
Port 80 Redirect: Port 80 redirects are used to get around ISPs that block inbound port 80. By using the this and running your webserver on an alternate port users can access your site without having to enter the port number in the url.
После само трябва да въведа другия порт. В случая 8000. По подразбиране бяха оставили в полето 8080. Има и друго поле за айпито ми, но то предполагам си се попълва автоматично, ако съм другаде. Са ще пробвам и това -D

k0tka рутера не ме засяга понеже ми трябва на лаптопа, с който съм в движение постоянно. Инсталирал съм клиента им, дето ги уведомява на определено време за да знаят айпито.

wget -rHD wavic.ddns.net wavic.ddns.net
Издърпва само index.html

Да, нормално, са погледнах man страницата и там пише, че не се включва при наличине на -H


Титла: Re: wget и ddns
Публикувано от: neter в Mar 12, 2015, 12:39
Да, нормално, са погледнах man страницата и там пише, че не се включва при наличине на -H
Не, в man страницата пише, че "-H" не се включва автоматично при наличие на "-D" :) Демек, добавянето на "-D" няма да има полза, докато не се добави и "-H" към командата. А горе ти се сваля само съдържанието от домейна, защото само него си описал в "-D" и не може да се отиде към файловете на IP-то.

Ами... начинът, по който от no-ip правят пренасочването не ти дава възможност за изпълнение на всичките ти желания. Виж как ще е с iptables пренасочване (не забравяй да махнеш пренасочването от no-ip):
Код:
iptables -A PREROUTING -t nat -p tcp --dport 80 -j REDIRECT --to-port 8000

А може и направо да си пуснеш сървъра на порт 80, като го изпълниш с root права, но не зная колко е подсигурен за такава работа - предвиден е само за изпълнение на статично съдържание, но това не значи, че не може да се експлоатира.


Титла: Re: wget и ddns
Публикувано от: 4096bits в Mar 12, 2015, 12:55
Мерси за iptables подсказката. И аз не зная oт noip как го правят. А да го пускам с root права ме притеснява. Не зная колко е сигурно, а си ползвам лапито за работа.
Ако пусна това при мен за iptables, как после да го отменя, защото на ръка да го пиша, няма да го запомня, ще трябва скриптче да си направя. Iptables нещо ми убягват. Не мога да намеря достатъчно ясно написано, как бачка това чудо.

Ами, как а му кажа на -D, че искам цялото съдържание? Аз очаквах, че като задам хоста и натам само си следва линковете от генерираната index.html


Титла: Re: wget и ddns
Публикувано от: 4096bits в Mar 12, 2015, 12:58
Или да им пиша, да видя какво ще кажат по въпроса.  ???


Титла: Re: wget и ddns
Публикувано от: neter в Mar 12, 2015, 14:21
Ако пусна това при мен за iptables, как после да го отменя, защото на ръка да го пиша, няма да го запомня, ще трябва скриптче да си направя.
Отменя се с команда:
Код:
iptables -t nat -D PREROUTING номер
Като "номер" е номерът на реда от nat таблицата. Ако нямаш други правила в PREROUTING веригата на nat таблицата, то номерът винаги ще е 1 и ще ти е лесно, но ако имаш (или очакваш да имаш) и други правила, то ще трябва да парсваш списъка, за да откриеш номера. Номерата на редовете могат да се показват с флага "--line-numbers". Пример:
Код:
iptables -L -n -t nat --line-numbers

Може би ще ти е по-лесно с програмката redir. Най-вероятно я нямаш текущо инсталирана, пакетът в Debian е едноименен. Тя работи като демонче за пренасочвания на заявки, като не отива сама в background, така че ще трябва да ѝ укажеш това, ако искаш да си освободиш конзолата за други команди. Най-удобно ще ти е да включваш първо нея, пращайки я в background, и после в същата конзола да си включваш сървъра. Примерна команда за включването ѝ като за твоя случай:
Код:
redir --lport=80 --cport=8000 &
Ампресандът отзад указва да замине в background. Тук отново важи правилото за нужда от root права при работа с портове под 1024. Командата се помни лесно и без скрипт (макар че няма лошо да си я вкараш в скрипт заедно с командата за включване на сървъра), а спирането ѝ става с убиване на процеса ѝ. При това пренасочване ще можеш да махнеш "-H" и "-D" флаговете от wget.


Титла: Re: wget и ddns
Публикувано от: 4096bits в Mar 12, 2015, 14:46
Мерси! Ще пробвам при първа възможност. Сега съм на най-популярната и най-прекрасна и скучна OS и се занимавам с глупости.
И ще трябва да науча iptables. Не може така да си връзвам сам ръцете с явно елементарни неща.  ::)