2016-07-11 10 views
1

複数のIPアドレスを持つUbuntuサーバーがあります。たとえば、Pythonリクエストのようなライブラリのアウトバウンドリクエストに対して正しいIPアドレスを設定するにはどうすればよいですか?2つのIPアドレスを持つサーバーでpythonリクエストを使用する方法

+0

'requests'モジュールが使用するインターフェイスを設定することが可能かどうか尋ねることを意味しますか? – DeepSpace

+1

この問題の解決方法を試してください:https://github.com/kennethreitz/requests/issues/394 – Alden

+1

送信元アドレスへのバインドを意味する場合は、[request toolbelt](https://toolbelt.readthedocs.io /en/latest/adapters.html#sourceaddressadapter)。 –

答えて

2

デフォルトでは、これはアプリケーションレベルではなく、オペレーティングシステムによって処理されます。 Linuxのルーティングテーブルによれば、OSは到達しようとしている宛先IPに応じて適切なインタフェースを選択します。

ip routeコマンド(manual)でLinuxのルーティングテーブルを編集できます。

しかし、あなたはここで指定したネットワークインタフェース

を使用するようにアプリケーションを伝えることができますが、生のソケットと関連する質問と提案されたソリューションです:リクエストに

# From http://stackoverflow.com/questions/335607 
import socket 
s = socket.socket() 
s.bind(("127.0.0.1", 0)) 
s.connect(("321.12.131.432", 80)) 

、それは以下のようになります。 (テストされていない)

# From http://stackoverflow.com/questions/12585317 
import socket 

real_create_conn = socket.create_connection 

def set_src_addr(*args): 
    address, timeout = args[0], args[1] 
    source_address = ('IP_ADDR_TO_BIND_TO', 0) 
    return real_create_conn(address, timeout, source_address) 

socket.create_connection = set_src_addr 

import requests 
r = requests.get('http://www.google.com') 
+1

なぜ2 downvotes?解決策が間違っていたら削除してください。 – Eloims

関連する問題