13.07.2015 Views

PDF - Xakep Online

PDF - Xakep Online

PDF - Xakep Online

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

ÂçëîìÕÀÊÅÐ\¹39\Ìàðò\2002ÏÎËÍÎÖÅÍÍÎÅ ÈÑÏÎËÜÇÎÂÀÍÈÅ ÑËÓÆÅÁÍÎÃÎ ÈÍÅÒÀFINNAN (finnan@mail.ru)use Socket;êîòîðàÿ óêàçûâàåò íà òî, ÷òî äëÿ ðàáîòû ñêðèïòà íåîáõîäèìîïîäêëþ÷åíèå ñîîòâåòñòâóþùåãî ìîäóëÿ.Êðîìå ýòîé êîìàíäû, íèêàêèõ äðóãèõ ñïåöèàëüíûõäèðåêòèâ äëÿ ðàáîòû íå ïîòðåáóåòñÿ.Ïåðâîå, ÷òî íóæíî íàó÷èòñÿ äåëàòü, - ýòî êîííåêòèòüñÿê ïðîèçâîëüíîìó ñåðâàêó íà ïðîèçâîëüíûé ïîðò.Äåëàåòñÿ ýòî òàêèì îáðàçîì:$sin=sockaddr_in($xport, inet_aton($xhost));socket(HTTPCMD, PF_INET, SOCK_STREAM,getprotobyname(‘tcp’));if (!connect(HTTPCMD, $sin)) {exit;} ïåðåìåííûõ $xport è $xhost äîëæíû íàõîäèòüñÿ íîìåðïîðòà è èìÿ õîñòà èëè åãî ip-àäðåñ. Ôóíêöèÿ connectïûòàåòñÿ ñäåëàòü íå÷òî ñîîòâåòñòâóþùåå åå íàçâàíèþ,è åñëè ýòî íå óäàåòñÿ, îíà âîçâðàùàåò 0. Åñëèæå âñå õîðîøî, òî HTTPCMD áóäåò äåñêðèïòîðîìñîçäàííîãî ñîåäèíåíèÿ. Ðàçðûâ ñîåäèíåíèÿ áóäåòâûãëÿäåòü ïîäîáíî çàêðûòèþ ôàéëà:close(HTTPCMD);Ïîñûëàòü äàííûå ïî óñòàíîâëåííîìó ñîåäèíåíèþ áóäåìòàê:send HTTPCMD, “$mydata”, 0;À ïðèíèìàòü äàííûå áóäåì, ÷èòàÿ èç ñîåäèíåíèÿ êàêèç ôàéëà:$newline = ;Òåïåðü ïîïðîáóé ñàìîñòîÿòåëüíî íàïèñàòü ñêðèïò,êîòîðûé êîííåêòèòñÿ íà êàêîé-íèáóäü ñåðâåð, ÷èòàåò/ïèøåòîòòóäà/òóäà ÷òî-íèáóäü, à çàòåì çàêðûâàåòñîåäèíåíèå, ÷òîáû ýòîò ïðîöåññ ñòàë äëÿ òåáÿ ñîâñåìïðîçðà÷íûì.Åñëè òû ïîïðîáîâàë ýòî ñäåëàòü, òî, âåðîÿòíî, óæå óñïåëîùóòèòü âñþ ìîùü, êîòîðóþ ïðåäîñòàâëÿþò ñêðèïòû,ñîçäàþùèå ñîåäèíåíèÿ. Êàéô çàêëþ÷àåòñÿ â òîì,÷òî âñå ýòè ñîåäèíåíèÿ îñóùåñòâëÿþòñÿ îò èìåíè ñåðâàêàõîñòèíã-ïðîâà, íà êîòîðîì îíè çàïóñêàþòñÿ, à ýòîòñåðâàê, â îòëè÷èå îò äîìàøíåãî êîìïà, èìååò ñîâåðøåííîíåìåðåíûé êàíàë, íå ãîâîðÿ óæå ïðî òî, ÷òî ðàáîòàåòïîñòîÿííî. Ïîýòîìó âñå ïðîãè, òðåáóþùèå áîëüøîéêàíàë èëè ìíîãî on-line âðåìåíè (íàïðèìåð, áðóòôîðñåðû),âî ìíîãèõ ñëó÷àÿõ âûãîäíåå ñîçäàâàòü íàïåðëå ñ ñîêåòàìè. Îäíàêî ïîñïåøó òåáÿ ïðåäóïðåäèòü:çëîóïîòðåáëÿÿ èñïîëüçîâàíèåì èñõîäÿùèõ ñîêåòîâ, òûðèñêóåøü íàâëå÷ü íà ñåáÿ ïðàâåäíûé ãíåâ ïðîâà.Âåðíåìñÿ ê íàøåé ïðîáëåìå. Ïëàí äåéñòâèÿ òàêîâ:êîííåêòèìñÿ íà íóæíûé http-ñåðâåð, çàêà÷èâàåì îòòóäàôàéë, ñîõðàíÿåì åãî ïîä äðóãèì èìåíåì (òåìó ìàñêèðîâêèè øèôðîâêè ñîäåðæèìîãî ôàéëà ðàññìîòðèìïîçæå) è ðàäóåìñÿ æèçíè. Íàïèñàòü êóñîê êîäà,êîòîðûé îñóùåñòâèò óñòàíîâêó êîííåêòà, ÿ äóìàþ, òûóæå ñìîæåøü (åñëè íåò - âåðíèñü íà äâà àáçàöà íàçàä).Äàëåå íóæíî íåìíîãî ïîîáùàòüñÿ ñ âåá-ñåðâåðîì,ïîýòîìó çàìîëâëþ ïàðó ñëîâ î HTTP (HypertextTransfer Protocol). Ïîñìîòðè êàê âûãëÿäèò ñòàíäàðòíûéçàïðîñ êëèåíòà âåá-ñåðâåðó:< Folder3>GET /xxx.jpg HTTP/1.0User-Agent: MozillaAccept: */*Host: www.super-site.bjg.sg.jtr.ckRange: bytes=110-3548790 ðàññìàòðèâàåìîì ñëó÷àå îñîáóþ âàæíîñòü èìåþòïåðâàÿ è ïîñëåäíÿÿ ñòðîêè, ïîòîìó ÷òî èìåííî îíèîïðåäåëÿþò òî, ÷òî áóäåò âîçâðàùåíî ñåðâåðîì. Íàçíà÷åíèåïåðâîé ñòðîêè â çàïðîñå, íàäåþñü, î÷åâèäíî.Ïîñëåäíÿÿ ñòðîêà îïðåäåëÿåò, êàêîé èìåííî êóñîêôàéëà íóæåí. Åñëè òðåáóåòñÿ çàêà÷àòü âåñü ôàéëöåëèêîì, òî åå óêàçûâàòü íå íàäî.  ïðèâåäåííîìïðèìåðå êëèåíò ïðîñèò ñåðâåð âåðíóòü åìó êóñîêôàéëà xxx.jpg ñî 110-ãî ïî 3548790-é áàéòû âêëþ÷èòåëüíî.Êñòàòè ãîâîðÿ, äàëåêî íå âñå ñåðâåðà ïîääåðæèâàþò÷àñòè÷íóþ çàêà÷êó ôàéëà. Òåáå ïðèõîäèëîñü ñòàëêèâàòüñÿñ ñåðâàêàìè, íå ïîääåðæèâàþùèìè ò.í. “äîêà÷êó”?Òàê âîò, ýòî îíè è åñòü.×òîáû íå îñëîæíÿòü ñèòóàöèþ, ÿ áóäó ðàññìàòðèâàòüòîëüêî õîðîøèå ñåðâåðà, êîòîðûå åå ïîääåðæèâàþò(áëàãî â ñåòè èõ áîëüøèíñòâî). íàøåì ñëó÷àå ÷àñòè÷íàÿ çàêà÷êà ôàéëà ìîæåò áûòüèñïîëüçîâàíà, åñëè òðåáóåòñÿ ñêà÷àòü ôàéë, ïðåâûøàþùèéêóïëåííîå (âçÿòîå íàïðîêàò) ìåñòî ó õîñòèíã-ïðîâà.Êðîìå òîãî, îíà ìîæåò îêàçàòüñÿ ïîëåçíîéâ òîì ñëó÷àå, åñëè òû ñîáèðàåøüñÿ íåñòè ñêà÷àííûéôàéë äîìîé íà äèñêåòàõ. Åñëè âäðóã îäíà èç ïÿòèäåñÿòèäèñêåò äîìà íå ïðî÷èòàåòñÿ, òî ìîæíî áóäåòòóò æå èç äîìà ñêà÷àòü íåäîñòàþùèå ïîëòîðà ìåòðà.Åñëè æå åñòü âîçìîæíîñòü íàðåçàòü áîëâàíêó íàìåñòå, òî ïîäîáíîãî ãåìîððîÿ óäàñòñÿ èçáåæàòü, õîòÿìíå, ïðèçíàþñü, â ñâîå âðåìÿ ïðèøëîñü èì èçðÿäíîïîñòðàäàòü (ÿ èìåþ â âèäó âîçíþ ñ äèñêåòàìè).Òàêèì îáðàçîì, ñêðèïò äîëæåí ñôîðìèðîâàòü è îòïðàâèòüíà ñåðâåð çàïðîñ, ïîäîáíûé òîìó, ÷òî ÿ ïðèâåëâ êà÷åñòâå ïðèìåðà. Îáðàùàþ òâîå âíèìàíèå íàòî, ÷òî â äàííîì ñëó÷àå ñèìâîëîì ïåðåâîäà ñòðîêèñëóæèò êîìáèíàöèÿ “\r\n”, à íå ñòàíäàðòíûé þíèõîâñêèé“\n”. Çàïðîñ îáÿçàòåëüíî äîëæåí çàêàí÷èâàòüñÿïóñòîé ñòðîêîé (ò.å. â êîíöå ïîñëåäíåé ñòðîêè áóäåòèäòè “\r\n\r\n”). Åñëè ýòîãî íå ñäåëàòü, ñåðâåð íåïîéìåò, ÷òî çàïðîñ çàêîí÷åí, è áóäåò æäàòü ñòîëüêî,ñêîëüêî ïîçâîëÿåò òàéìàóò.Ïîñëå îòïðàâêè çàïðîñà ñëåäóåò íà÷àòü ïðèíèìàòüäàííûå, äëÿ ïåðåäà÷è êîòîðûõ, â îòëè÷èå îò ftp, íåòðåáóåòñÿ ñîçäàíèå íîâîãî ñîåäèíåíèÿ (ò.å. ïåðåäà÷àáóäåò ïðîèñõîäèòü â óæå óñòàíîâëåííîì ñîåäèíåíèè).Äàííûå áóäóò ñîñòîÿòü èç çàãîëîâêà, ïðåäñòàâëÿþùåãîñîáîé íåñêîëüêî ñòðîê, ðàçäåëåííûõ “\r\n”, ïîñëåêîòîðîãî áóäåò èäòè ïóñòàÿ ñòðîêà è çàòåì - òðåáóåìûåäàííûå.  çàãîëîâêå óêàçûâàåòñÿ ðàçìåð ïåðåäàâàåìûõäàííûõ, êîä îòâåòà ñåðâåðà è åùå ìíîãî äîïîëíèòåëüíîéèíôîðìàöèè. Âñå ýòî ïðèìåðíî â òàêîì äóõå:HTTP/1.1 200 OKDate: Tue, 29 Jan 2002 16:10:59 GMTServer: Apache/1.3.6 (Win32)Last-Modified: Sun, 07 Oct 2001 00:23:46 GMTETag: “0-8e7b0c-3bbda092”Accept-Ranges: bytesContent-Length: 9358092Connection: closeContent-Type: audio/mpegÏåðâàÿ ñòðîêà ñîäåðæèò êðàòêèé îòâåò ñåðâåðà íà êîìàíäó,ïîýòîìó ïîëåçíî åãî àíàëèçèðîâàòü. Íàïðèìåð,åñëè áóäåò íå “200 OK”, à “404 Not Found”, òî,âèäèìî, äàííûå áóäóò íå î÷åíü ñîäåðæàòåëüíû.Perl-êîä, îïóñêàþùèé çàãîëîâîê è ñîõðàíÿþùèé äàííûåâ ôàéë, âûãëÿäèò òàê:while () {if ($_ eq “\r\n”) {last;}}while () {print NF;}Ãäå HTTPCMD - äåñêðèïòîð òåêóùåãî ñîåäèíåíèÿ, àNF - äåñêðèïòîð ôàéëà, â êîòîðûé áóäóò ñîõðàíåíûäàííûå.Òàêèì îáðàçîì, ôàéë ïîëó÷åí è ñîõðàíåí íà èñïîëüçóåìîìñåðâåðå ïîä ëþáûì óäîáíûì èìåíåì, ò.å.ìîæíî êà÷àòü, áèòü â òàìòàìû è êðè÷àòü “Óðà!”.Òåïåðü ïàðà ñëîâ î òîì, êàê èñïîëüçîâàòü ýòîò ìåòîä âñâîå óäîâîëüñòâèå è ïðè ýòîì íå íàâëå÷ü íà ñåáÿ ãíåâàäìèíà. Õîðîøî çàðåêîìåíäîâàëà ñåáÿ ñëåäóþùàÿ ñõåìàðàáîòû: âûáèðàåòñÿ ðàçìåð ñêà÷èâàåìîãî êóñêà, ëåæàùèéâ ðàçóìíûõ ïðåäåëàõ. Åñëè ïðåäïîëàãàåòñÿ èñïîëüçîâàòüóïîìÿíóòóþ âûøå ñõåìó âîçíè ñ äèñêåòàìèïîä íàçâàíèåì “ãåìîððîé”, òî ýòî çíà÷åíèå áóäåò ðàâíî1400000 (÷óòü ìåíüøå ðàçìåðà äèñêåòû, ò.ê. ïîñëåäíÿÿìîæåò áûòü ñëåãêà áèòîé). Åñëè ñõåìà “ãåìîððîé” èñïîëüçîâàòüñÿíå áóäåò, òî ðàçìåð êóñêà ñëåäóåò âûáðàòü÷óòü áîëüøå, îäíàêî óêàçàííîå çíà÷åíèå (1400000) íàïðàêòèêå çàðåêîìåíäîâàëî ñåáÿ íåïëîõî. Äàëåå, ñêðèïòó÷åðåç URL ïåðåäàåòñÿ íîìåð êóñêà, êîòîðûé òðåáóåòñÿñêà÷àòü, îí, ïóòåì íåõèòðûõ ìàòåìàòè÷åñêèõ îïåðàöèé,ïîëó÷àåò äèàïàçîí òðåáóþùèõñÿ áàéò, ñîçäàåò èîòïðàâëÿåò ñîîòâåòñòâóþùèé çàïðîñ ñåðâåðó, ñîõðàíÿåòïåðåäàííûå èì äàííûå (æåëàòåëüíî íå â cgi-bin, à òóäà,ãäå ëåæàò html-êè), çàòåì âîò òàêèì êîäîì:print “Content-type: */*\r\n”;print “Location: $newfilelocation\r\n”;print “\r\n”;ïåðåíàïðàâëÿåò çàïðîñ íà òîëüêî ÷òî ñêà÷àííûéôàéë. Ò.å. òåáå íóæíî áóäåò ââåñòè â àäðåñíîé ñòðîêåîñëà èëè îïåðû ÷òî-òî âðîäå: http://www.mycoolsite.ru/cgi-bin/script.cgi?n=4.Ýòîò ñêðèïò ñêà÷àåò 4-éêóñîê è ñîõðàíèò åãî, íàïðèìåð, â “/tmp/xe-xexe.004”,à çàòåì ïåðåíàïðàâèò áðàóçåð íà ñêà÷àííûéôàéë, ò.å. íà htpp://www.mycoolsite.ru/tmp/xe-xexe.004.Áðîäèëêà êèíåòñÿ åãî êà÷àòü, è â èòîãå òû ïîëó÷èøüòî, ÷òî òðåáîâàëîñü.“Çà÷åì æå òàêîé ãåìîð ñ êóñêàìè. Ìîæåò áûòü ñòîèòçàëèòü ôàéëî öåëèêîì?” - ñïðîñèøü òû. “Íå ñòîèò” -îòâå÷ó ÿ. Ïîòîìó ÷òî åñëè ôàéë áîëüøîé (> 3-5 mb),< Âçëîì >20/03\021 2 3 458 Íüþñû Ôåððóì PC_Zone X-Ñòèëü Âçëîì

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!