ローカルプロキシの制限を回避する簡単な方法

そもそも、 VKontakteに行く必要がありました。

当時、私はある大企業で働いていました。 ローカルプロキシサーバーは、コンテンツ内のすべての要求をブロックしました。これは、リソースだけでなく、このリソースの兆候でした。 もちろん、アノニマイザーの存在は知っていました。 しかし、そのようなサービスの速度と機能をテストした後、私は非常に怒っていました。

さらに、現在のネットワークデバイスから、トラフィックが通過するすべてのノードがそれを表示でき、HTTPトラフィックは通常、明確な形式で送信されます。

このためには、外部IPと独自のWebサーバーを自由に使用して、お金を支払う必要があります。

そのため、トラフィックをリダイレクトし、フィルタリングされた(プロキシ)情報を削除する簡単なスクリプトを作成するというアイデアが生まれました。



まず、web-proxyのベースを予約します:

-Apache 2

-mod_rewrite、php_curlを使用したPHP

VKontakteでのみ動作し、その機能が考慮されます。



それでは始めましょう



.htaccessに次の行を追加する必要があります。

  RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^(.*)$ /_?url=$1 [QSA]
      
      





これにより、トラフィックが単一のファイルにリダイレクトされます。

script_name -index.phpなどを実行しません。



次に、認可



すべてのリクエストを単一のスクリプトにリダイレクトするだけでは、認証は機能しません。 リクエストは、 vkontakte.ru / login.phpおよびlogin.vk.com/?act=loginの 2つのドメインに送信する必要があります

  curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, "email=".$email."&pass=".$pass); curl_setopt($ch, CURLOPT_URL, 'http://vkontakte.ru/login.php'); $body = curl_exec($ch);
      
      





  curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, "email=".$email."&pass=".$pass); curl_setopt($ch, CURLOPT_URL, 'http://login.vk.com/?act=login'); $body = curl_exec($ch);
      
      







サブドメイン



VKの第3レベルよりも大きいドメインが表示されなかったため、ドメインの完全な分析を行いませんでした。

  $subdomain = explode(".",$_SERVER['SERVER_NAME']); if (count($subdomain) > $cnt_server) $sub = $subdomain[0]."."; else $sub = "";
      
      





すべての(*)サブドメインもDNSおよびVirtualHostに追加する必要があります。



クエリの作成、GETおよびPOST



クエリもそれほど単純ではありません- 二重配列にすることができます 。 これは、特に検索に適用されます。 したがって、これも考慮する必要があります。 私はあまり入れ子に気づきませんでした。

私はこのようにしました:

  $gl = $_GET; $first_get = true; $flink = false; foreach($gl as $key_get => $value_get){ if(!$flink){ $flink = true; continue; } if(is_array($gl[$key_get])){ foreach($gl[$key_get] as $dbkey_get => $dbvalue_get){ $link .= ($first_get?"?":"&").$key_get."[".$dbkey_get."]".(!empty($dbvalue_get) ? "=".urlencode($dbvalue_get) : ""); $first_get = false; } } else { $link .= ($first_get?"?":"&").$key_get.(!empty($value_get) ? "=".urlencode($value_get) : ""); $first_get = false; } }
      
      





POSTリクエストでも同じです。



フィルタリング



超自然的なものは何も適用されません。通常の正規表現と文字列関数は、フィルタリングされたトラフィックを削除してリンクを置き換えます。



また、VKがWindows-1251のエンコードで機能することを忘れないでください。

JavaScriptは、圧縮されたgzipで送信できます。これは、cURLライブラリによって修正されます。

  curl_setopt($ch, CURLOPT_ENCODING , 'gzip');
      
      





さらに、このパラメーターは、非圧縮のjsスクリプトでも正しく機能します。



結論として



このスクリプトは正常に使用されました。

フィルタプロキシバイパス 、つまり ロボットは難しくありませんが、だれも管理者をキャンセルしておらず、彼らの欺ceptionはまったく別の問題です。

明らかに、主なトラフィックは画像​​に該当します。 そしてこのために、すなわち 1つのIPからの大量のトラフィックの疑いがないように、それらをロードするための分散システムを作成する予定でしたが、これには至りませんでした。



PSこの実装により、オーディオおよびビデオコンテンツを再生できますが、一部のアナログはこの機能をサポートしていません。 残念ながら、ゲームはサポートされていません。



PPS正直なところ、VKをhttps-authorizationに移行した後(これがいつ発生したかはわかりません)、スクリプトや承認を確認しませんでした。



All Articles