{"id":1078,"date":"2016-11-09T20:00:32","date_gmt":"2016-11-09T19:00:32","guid":{"rendered":"http:\/\/morony.pl\/?p=1078"},"modified":"2016-11-09T22:11:52","modified_gmt":"2016-11-09T21:11:52","slug":"sprytne-omijanie-limitu-zapytan-z-adresu-ip","status":"publish","type":"post","link":"https:\/\/morony.pl\/?p=1078","title":{"rendered":"Sprytne omijanie limitu zapyta\u0144 z adresu IP"},"content":{"rendered":"<p>Dawno dawno temu podj\u0105\u0142em si\u0119 parsowania danych z pewnej strony www, na kt\u00f3rej obowi\u0105zywa\u0142 limit ilo\u015bci zapyta\u0144 z jednego adresu IP. Dzia\u0142a\u0142o to mniej wi\u0119cej tak, \u017ce po kilku zapytaniach dany adres IP by\u0142 blokowany na kilka minut. Poniewa\u017c do pobrania by\u0142o bardzo du\u017co rekord\u00f3w, filtr ten skutecznie mnie blokowa\u0142. Zacz\u0105\u0142em szuka\u0107 rozwi\u0105zania i po kilku iteracjach doszed\u0142em do prostego i relatywnie taniego sposobu. <\/p>\n<p>Na rynku istnieje wielu dostawc\u00f3w us\u0142ugi zwanej Hosting SEO (do pozycjonowania) &#8211; od zwyk\u0142ego hostingu r\u00f3\u017cni si\u0119 mo\u017cliwo\u015bci\u0105 wykorzystania wielu adres\u00f3w IP w ramach jednego konta. Adresy IP s\u0105 stosunkowo drogie (je\u015bli potrzebujemy kilkadziesi\u0105t), ale w hostingu SEO ta sama pula adres\u00f3w dost\u0119pna jest dla wielu kont klient\u00f3w. Za konto z pul\u0105 32 adres\u00f3w IP zap\u0142acimy rz\u0119du 20-30 z\u0142 za miesi\u0105c. Po wykupieniu us\u0142ugi i zalogowaniu si\u0119 do panelu admina powinni\u015bmy mie\u0107 dost\u0119p do listy &#8220;naszych&#8221; adres\u00f3w ip. <\/p>\n<p>Zanim przejdziemy do rozwi\u0105zania, zr\u00f3bmy prosty test. Spr\u00f3bujmy z poziomu serwera sprawdzi\u0107 adres IP. Zrobimy to za pomoc\u0105 prostego skryptu php:<\/p>\n<p><center><\/p>\n<pre style=\"width:700px; overflow:auto; text-align:left;\"><code class=\"php\">&lt;?php\r\n\t$ch = curl_init('http:\/\/whatismyip.org\/');\r\n\tcurl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);\r\n\t$myIp = curl_exec($ch);\r\n\tpreg_match_all('\/\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\/',$myIp, $out);\r\n\tprint_r($out);\r\n?&gt;\r\n<\/code><\/pre>\n<p><\/center><\/p>\n<p>Skrypt uruchamiamy przez przegl\u0105dark\u0119 (tani serwer raczej nie oferuje dost\u0119pu przez ssh). Wynik powinien wygl\u0105da\u0107 mniej wi\u0119cej tak:<br \/>\n<center><\/p>\n<pre style=\"width:700px; overflow:auto; text-align:left;\"><code class=\"html\">Array\r\n(\r\n    [0] => Array\r\n        (\r\n            [0] => 212.59.244.5\r\n        )\r\n\r\n)\r\n<\/code><\/pre>\n<p><\/center><\/p>\n<p>Adres IP, kt\u00f3ry si\u0119 wy\u015bwietli jest najprawdopodobniej przypisany domy\u015blnie do naszego konta. Mo\u017cemy przez panel administratora go zmieni\u0107 i spr\u00f3bowa\u0107 ponownie. Niestety takie rozwi\u0105zanie nie pomo\u017ce nam w szybkim zmienianiu adres\u00f3w. Okazuje si\u0119, \u017ce wystarczy przy wywo\u0142ywaniu CURL doda\u0107 informacj\u0119, z kt\u00f3rego interfejsu sieciowego serwera chcemy skorzysta\u0107. Na li\u015bcie dost\u0119pnych dla mojego konta adres\u00f3w IP by\u0142y 32 pozycje:<\/p>\n<p><center><a href=\"http:\/\/morony.pl\/wp-content\/uploads\/2016\/11\/IP.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"322\" height=\"1024\" src=\"http:\/\/morony.pl\/wp-content\/uploads\/2016\/11\/IP-322x1024.jpg\" alt=\"ip\" style=\"width:80px;height:auto;\" class=\"alignnone size-large wp-image-1085\" srcset=\"https:\/\/morony.pl\/wp-content\/uploads\/2016\/11\/IP-322x1024.jpg 322w, https:\/\/morony.pl\/wp-content\/uploads\/2016\/11\/IP-94x300.jpg 94w\" sizes=\"(max-width: 322px) 100vw, 322px\" \/><\/a><\/center><\/p>\n<p>U\u017cyjmy pierwszego adresu z listy:<\/p>\n<p><center><\/p>\n<pre style=\"width:700px; overflow:auto; text-align:left;\"><code class=\"php\">&lt;?php\r\n\t$ch = curl_init('http:\/\/whatismyip.org\/');\r\n\tcurl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);\r\n\tcurl_setopt($ch,CURLOPT_INTERFACE,\"31.6.69.41\");\r\n\t$myIp = curl_exec($ch);\r\n\tpreg_match_all('\/\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\/',$myIp, $out);\r\n\tprint_r($out);\r\n?&gt;\r\n<\/code><\/pre>\n<p><\/center><\/p>\n<p>Otrzymujemy wynik:<br \/>\n<center><\/p>\n<pre style=\"width:700px; overflow:auto; text-align:left;\"><code class=\"html\">Array\r\n(\r\n    [0] => Array\r\n        (\r\n            [0] => 31.6.69.41\r\n        )\r\n\r\n)\r\n<\/code><\/pre>\n<p><\/center><\/p>\n<p>Dzia\u0142a! Za pomoc\u0105 CURL mo\u017cemy zdzia\u0142a\u0107 cuda. Wystarczy tylko dopisa\u0107 logik\u0119, kt\u00f3ra losowo b\u0119dzie przy ka\u017cdym zapytaniu zmienia\u0142a adresy IP. <\/p>\n<p>Je\u015bli kto\u015b jest dociekliwy to mo\u017ce odkry\u0107 jeszcze jedn\u0105 rzecz. Wykupuj\u0105c najta\u0144sze konto (z najmniejsz\u0105 liczb\u0105 adres\u00f3w IP) b\u0119dziemy dzia\u0142ali prawdopodobnie na tej samej maszynie co w\u0142a\u015bciciele dro\u017cszych pakiet\u00f3w. Mo\u017cemy wi\u0119c korzysta\u0107 z ca\u0142ej puli adres\u00f3w IP przypisanych do tego serwera, nawet je\u015bli nie s\u0105 dla nas dost\u0119pne w panelu. U mnie dzia\u0142a\u0142y np. takie adresy spoza listy: 31.6.69.42, 31.6.69.43, 31.6.69.45, 31.6.69.47 (wi\u0119cej nie pr\u00f3bowa\u0142em). U\u017cycie adresu nie przypisanego do danej maszyny spowoduje zwr\u00f3cenie pustego stringa &#8211; nasze dane nie wiedzia\u0142y jak wr\u00f3ci\u0107.<\/p>\n<p>Trzeba pami\u0119ta\u0107 jeszcze o ma\u0142ej ma\u0142ych zasobach serwera dla takiego konta hostingowego &#8211; je\u015bli zaczniemy generowa\u0107 za du\u017ce obci\u0105\u017cenie pr\u0119dzej czy p\u00f3\u017aniej odezwie si\u0119 admin z pretensjami.  <\/p>\n<p>Mo\u017ce komu\u015b z Was si\u0119 takie co\u015b kiedy\u015b przyda. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dawno dawno temu podj\u0105\u0142em si\u0119 parsowania danych z pewnej strony www, na kt\u00f3rej obowi\u0105zywa\u0142 limit ilo\u015bci zapyta\u0144 z jednego adresu IP. Dzia\u0142a\u0142o to mniej wi\u0119cej tak, \u017ce po kilku zapytaniach dany adres IP by\u0142 blokowany na kilka minut. Poniewa\u017c do pobrania by\u0142o bardzo du\u017co rekord\u00f3w, filtr ten skutecznie mnie blokowa\u0142. Zacz\u0105\u0142em szuka\u0107 rozwi\u0105zania i po [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/morony.pl\/index.php?rest_route=\/wp\/v2\/posts\/1078"}],"collection":[{"href":"https:\/\/morony.pl\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/morony.pl\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/morony.pl\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/morony.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1078"}],"version-history":[{"count":12,"href":"https:\/\/morony.pl\/index.php?rest_route=\/wp\/v2\/posts\/1078\/revisions"}],"predecessor-version":[{"id":1092,"href":"https:\/\/morony.pl\/index.php?rest_route=\/wp\/v2\/posts\/1078\/revisions\/1092"}],"wp:attachment":[{"href":"https:\/\/morony.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1078"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/morony.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1078"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/morony.pl\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1078"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}