Python HTTP プロキシを使ってみる
0x00 はじめに
HTTP プロキシには、さまざまな面で非常に幅広い用途があります。 HTTP プロキシは、フォワード プロキシとリバース プロキシに分けられ、後者は通常、ユーザーにファイアウォールの背後にあるサービスへのアクセスを提供するため、または Nginx や HAProxy などの目的で使用されます。この記事では、フォワード プロキシについて説明します。
HTTP プロキシの最も一般的な用途は、ネットワーク共有、ネットワークの高速化、ネットワーク制限の突破などです。さらに、HTTP プロキシは、Web アプリケーションのデバッグ、Android/IOS APP で呼び出される Web API の監視、分析にも一般的に使用されており、現在、よく知られているソフトウェアには、Fiddler、Charles、Burp Suite、mitmproxy などがあります。 HTTP プロキシを使用すると、サーバーを変更せずにリクエスト/レスポンスのコンテンツを変更したり、Web アプリケーションに機能を追加したり、アプリケーションの動作を変更したりすることもできます。
0x01 HTTP プロキシとは
HTTP プロキシは本質的に Web アプリケーションであり、他の通常の Web アプリケーションと基本的に変わりません。 HTTPプロキシはリクエストを受信すると、ヘッダーのHostフィールドのホスト名とGet/POSTリクエストのアドレスから総合的に対象ホストを判断し、新たなHTTPリクエストを確立し、リクエストデータを転送し、受信したレスポンスデータを転送します。クライアントに。
リクエスト アドレスが絶対アドレスの場合、HTTP プロキシはアドレスのホストを使用します。それ以外の場合は、ヘッダーの HOST フィールドが使用されます。ネットワーク環境が次のとおりであると仮定して、簡単なテストを実行します。
192.168.1.2 Web サーバー
192.168.1.3 HTTP プロキシ サーバー
Telnet を使用してテストします
$ telnet 192.168.1.3 GET / HTTP/1.0 HOST: 192.168.1.2
最後に 2 つの連続したキャリッジリターンが必要であることに注意してくださいこれは HTTP プロトコルの要件です。完了すると、http://192.168.1.2/ のページコンテンツを受信できるようになります。 GET リクエストを行うときに絶対アドレスをいくつか調整してみましょう
$ telnet 192.168.1.3 GET http://httpbin.org/ip HTTP/1.0 HOST: 192.168.1.2
HOST も 192.168.1.2 に設定されていますが、実行結果は http://httpbin.org/ip ページのコンテンツを返すことに注意してください。 、これはパブリック ネットワーク IP アドレス情報です。
上記のテストプロセスからわかるように、元のリクエストがプロキシサーバーに送信される限り、HTTP プロキシはそれほど複雑なものではありません。少数のホストが HTTP プロキシを必要とするシナリオで HTTP プロキシを設定できない場合、最も簡単な方法は、ターゲット ホスト ドメイン名の IP をプロキシ サーバーにポイントすることです。これは、hosts ファイルを変更することで実現できます。 。
0x02 PythonプログラムでHTTPプロキシを設定する
urllib2/urllib プロキシ設定
urllib2は非常に強力な機能を備えたPythonの標準ライブラリですが、使い方が少し面倒です。 Python 3 では、urllib2 は保持されなくなり、urllib モジュールに移動されました。 urllib2 では、ProxyHandler を使用してプロキシ サーバーを設定します。
proxy_handler = urllib2.ProxyHandler({'http': '121.193.143.249:80'}) opener = urllib2.build_opener(proxy_handler) r = opener.open('http://httpbin.org/ip') print(r.read())
また、install_opener を使用して、構成されたオープナーをグローバル環境にインストールすることもできます。これにより、すべての urllib2.urlopen が自動的にプロキシを使用するようになります
urllib2.install_opener(opener) r = urllib2.urlopen('http://httpbin.org/ip') print(r.read())
Python 3 では、urllib を使用します。
proxy_handler = urllib.request.ProxyHandler({'http': 'http://121.193.143.249:80/'}) opener = urllib.request.build_opener(proxy_handler) r = opener.open('http://httpbin.org/ip') print(r.read())
requests proxy settings
requests は、現在最高の HTTP ライブラリの 1 つであり、http リクエストを構築するときに私が最もよく使用するライブラリでもあります。その API 設計は非常にユーザーフレンドリーで使いやすいです。リクエストのプロキシの設定は非常に簡単です。プロキシのパラメータを {'http': 'x.x.x.x:8080', 'https': 'x.x.x.x:8080'} の形式で設定するだけです。このうち http と https は互いに独立しています。
In [5]: requests.get('http://httpbin.org/ip', proxies={'http': '121.193.143.249:80'}).json() Out[5]: {'origin': '121.193.143.249'}
セッションのプロキシ属性を直接設定できるため、リクエストごとにプロキシ パラメータを持ち込む手間が省けます。
s = requests.session() s.proxies = {'http': '121.193.143.249:80'} print(s.get('http://httpbin.org/ip').json())
0x03 HTTP_PROXY / HTTPS_PROXY 環境変数
urllib2 と Requests ライブラリはどちらも HTTP_PROXY および HTTPS_PROXY 環境変数を認識し、これらの環境変数が検出されると、プロキシを自動的に設定して使用します。これは、コードを変更せずに環境変数に従ってプロキシ サーバーの IP アドレスとポートを調整できるため、HTTP プロキシを使用してデバッグする場合に非常に便利です。 *nix のほとんどのソフトウェアは、curl、wget、axel、aria2c などの HTTP_PROXY 環境変数認識もサポートしています。
$ http_proxy=121.193.143.249:80 python -c 'import requests; print(requests.get("http://httpbin.org/ip").json())' {u'origin': u'121.193.143.249'} $ http_proxy=121.193.143.249:80 curl httpbin.org/ip { "origin": "121.193.143.249" }
IPython インタラクティブ環境では、HTTP リクエストを一時的にデバッグする必要がある場合があります。os.environ['http_proxy'] を設定するだけで、HTTP プロキシを追加/キャンセルできます。
In [245]: os.environ['http_proxy'] = '121.193.143.249:80' In [246]: requests.get("http://httpbin.org/ip").json() Out[246]: {u'origin': u'121.193.143.249'} In [249]: os.environ['http_proxy'] = '' In [250]: requests.get("http://httpbin.org/ip").json() Out[250]: {u'origin': u'x.x.x.x'}
0x04 MITM-Proxy
MITM は、中間者攻撃を意味する Man-in-the-Middle Attack に由来しており、一般に、ネットワーク内のデータを傍受、監視、改ざんします。クライアントとサーバー。
mitmproxy は、Python 言語で開発されたオープンソースの中間者プロキシ アーティファクトで、SSL、透過プロキシ、リバース プロキシ、トラフィックの記録と再生、カスタム スクリプトをサポートしています。この機能は Windows の Fiddler に似ていますが、mitmproxy は GUI インターフェイスを持たないコンソール プログラムですが、非常に便利に使用できます。 mitmproxy を使用すると、プロキシ HTTP 要求/応答パケットを簡単にフィルタリング、インターセプト、および変更できます。また、そのスクリプト API を使用して、HTTP データを自動的にインターセプトおよび変更するスクリプトを作成することもできます。
りー上面的脚本会在所有经过代理的Http响应包头里面加上一个名为BOOM的header。用mitmproxy -s 'test.py'命令启动mitmproxy,curl验证结果发现的确多了一个BOOM头。
$ http_proxy=localhost:8080 curl -I 'httpbin.org/get' HTTP/1.1 200 OK Server: nginx Date: Thu, 03 Nov 2016 09:02:04 GMT Content-Type: application/json Content-Length: 186 Connection: keep-alive Access-Control-Allow-Origin: * Access-Control-Allow-Credentials: true BOOM: boom!boom!boom! ...
显然mitmproxy脚本能做的事情远不止这些,结合Python强大的功能,可以衍生出很多应用途径。除此之外,mitmproxy还提供了强大的API,在这些API的基础上,完全可以自己定制一个实现了特殊功能的专属代理服务器。
经过性能测试,发现mitmproxy的效率并不是特别高。如果只是用于调试目的那还好,但如果要用到生产环境,有大量并发请求通过代理的时候,性能还是稍微差点。我用twisted实现了一个简单的proxy,用于给公司内部网站增加功能、改善用户体验,以后有机会再和大家分享。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









MySQLには、無料のコミュニティバージョンと有料エンタープライズバージョンがあります。コミュニティバージョンは無料で使用および変更できますが、サポートは制限されており、安定性要件が低く、技術的な能力が強いアプリケーションに適しています。 Enterprise Editionは、安定した信頼性の高い高性能データベースを必要とするアプリケーションに対する包括的な商業サポートを提供し、サポートの支払いを喜んでいます。バージョンを選択する際に考慮される要因には、アプリケーションの重要性、予算編成、技術スキルが含まれます。完璧なオプションはなく、最も適切なオプションのみであり、特定の状況に応じて慎重に選択する必要があります。

この記事では、MySQLデータベースの操作を紹介します。まず、MySQLWorkBenchやコマンドラインクライアントなど、MySQLクライアントをインストールする必要があります。 1. mysql-uroot-pコマンドを使用してサーバーに接続し、ルートアカウントパスワードでログインします。 2。CreatedAtaBaseを使用してデータベースを作成し、データベースを選択します。 3. createTableを使用してテーブルを作成し、フィールドとデータ型を定義します。 4. INSERTINTOを使用してデータを挿入し、データをクエリし、更新することでデータを更新し、削除してデータを削除します。これらの手順を習得することによってのみ、一般的な問題に対処することを学び、データベースのパフォーマンスを最適化することでMySQLを効率的に使用できます。

MySQLのインストール障害の主な理由は次のとおりです。1。許可の問題、管理者として実行するか、SUDOコマンドを使用する必要があります。 2。依存関係が欠落しており、関連する開発パッケージをインストールする必要があります。 3.ポート競合では、ポート3306を占めるプログラムを閉じるか、構成ファイルを変更する必要があります。 4.インストールパッケージが破損しているため、整合性をダウンロードして検証する必要があります。 5.環境変数は誤って構成されており、環境変数はオペレーティングシステムに従って正しく構成する必要があります。これらの問題を解決し、各ステップを慎重に確認して、MySQLを正常にインストールします。

mysqlダウンロードファイルは破損していますが、どうすればよいですか?残念ながら、MySQLをダウンロードすると、ファイルの破損に遭遇できます。最近は本当に簡単ではありません!この記事では、誰もが迂回を避けることができるように、この問題を解決する方法について説明します。それを読んだ後、損傷したMySQLインストールパッケージを修復するだけでなく、将来の行き詰まりを避けるために、ダウンロードとインストールプロセスをより深く理解することもできます。最初に、ファイルのダウンロードが破損した理由について話しましょう。これには多くの理由があります。ネットワークの問題は犯人です。ダウンロードプロセスの中断とネットワーク内の不安定性は、ファイル腐敗につながる可能性があります。ダウンロードソース自体にも問題があります。サーバーファイル自体が壊れており、もちろんダウンロードすると壊れています。さらに、いくつかのウイルス対策ソフトウェアの過度の「情熱的な」スキャンもファイルの破損を引き起こす可能性があります。診断問題:ファイルが本当に破損しているかどうかを判断します

MySQLは、基本的なデータストレージと管理のためにネットワーク接続なしで実行できます。ただし、他のシステムとのやり取り、リモートアクセス、または複製やクラスタリングなどの高度な機能を使用するには、ネットワーク接続が必要です。さらに、セキュリティ対策(ファイアウォールなど)、パフォーマンスの最適化(適切なネットワーク接続を選択)、およびデータバックアップは、インターネットに接続するために重要です。

MySQLデータベースパフォーマンス最適化ガイドリソース集約型アプリケーションでは、MySQLデータベースが重要な役割を果たし、大規模なトランザクションの管理を担当しています。ただし、アプリケーションのスケールが拡大すると、データベースパフォーマンスのボトルネックが制約になることがよくあります。この記事では、一連の効果的なMySQLパフォーマンス最適化戦略を検討して、アプリケーションが高負荷の下で効率的で応答性の高いままであることを保証します。実際のケースを組み合わせて、インデックス作成、クエリ最適化、データベース設計、キャッシュなどの詳細な主要なテクノロジーを説明します。 1.データベースアーキテクチャの設計と最適化されたデータベースアーキテクチャは、MySQLパフォーマンスの最適化の基礎です。いくつかのコア原則は次のとおりです。適切なデータ型を選択し、ニーズを満たす最小のデータ型を選択すると、ストレージスペースを節約するだけでなく、データ処理速度を向上させることもできます。

MySQLは開始を拒否しましたか?パニックにならないでください、チェックしてみましょう!多くの友人は、MySQLのインストール後にサービスを開始できないことを発見し、彼らはとても不安でした!心配しないでください、この記事はあなたがそれを落ち着いて対処し、その背後にある首謀者を見つけるためにあなたを連れて行きます!それを読んだ後、あなたはこの問題を解決するだけでなく、MySQLサービスの理解と問題のトラブルシューティングのためのあなたのアイデアを改善し、より強力なデータベース管理者になることができます! MySQLサービスは開始に失敗し、単純な構成エラーから複雑なシステムの問題に至るまで、多くの理由があります。最も一般的な側面から始めましょう。基本知識:サービススタートアッププロセスMYSQLサービススタートアップの簡単な説明。簡単に言えば、オペレーティングシステムはMySQL関連のファイルをロードし、MySQLデーモンを起動します。これには構成が含まれます

MySQLパフォーマンスの最適化は、インストール構成、インデックス作成、クエリの最適化、監視、チューニングの3つの側面から開始する必要があります。 1。インストール後、INNODB_BUFFER_POOL_SIZEパラメーターやclose query_cache_sizeなど、サーバーの構成に従ってmy.cnfファイルを調整する必要があります。 2。過度のインデックスを回避するための適切なインデックスを作成し、説明コマンドを使用して実行計画を分析するなど、クエリステートメントを最適化します。 3. MySQL独自の監視ツール(ShowProcessList、ShowStatus)を使用して、データベースの健康を監視し、定期的にデータベースをバックアップして整理します。これらの手順を継続的に最適化することによってのみ、MySQLデータベースのパフォーマンスを改善できます。
