2011-11-23 7 views
6

Iは、以下のコードを有する:それは2つのネットワークインタフェースを持つマシン上で実行しているパイソン:異なるネットワークインタフェースを使用してurllib2の

f = urllib2.urlopen(url) 
data = f.read() 
f.close() 

を。コードを使用するインターフェイスを指定したいと思います。具体的には、デフォルトで使用しているもの以外のものを使用したいと思っています...しかし、私がインタフェースを選ぶことができれば、どれがどれであるかわかります。

これを行うには最も簡単な方法がありますか?

+0

システムルート値を変更して、リモートサーバーへの強制的な接続が他のインターフェイスを使用しないとしますか? –

+0

@CédricJulien:可能ならばコード内で行う方法も知っていますが、それはうまくいくでしょう(特定のWebサイトへのすべての接続を他のインターフェイスに渡すことができれば)。 – Claudiu

答えて

3

まだ完全なソリューションが、あなただけの単純なソケットオブジェクトを使用していた場合、あなたはこの方法で必要なものを行うことができます:

import socket 
s = socket.socket() 
s.bind(("127.0.0.1", 0)) # replace "127.0.0.1" by the local IP of the interface to use 
s.connect(("remote_server.com", 80)) 

したがって、あなたが希望にソケットをバインドするためにシステムを強制しますネットワークインターフェース。

+0

Linuxを使用している場合、この[recipe](http://code.activestate.com/recipes/439094-get-the-ip-address-associated-with-a-network-inter/)は、インターフェース名からIPアドレスへのマップ。 – jcollado

2

あなたはツイストのtwisted.web.client.Agentを使用する場合は、経由してこれを達成することができます

from twisted.internet import reactor 
from twisted.web.client import Agent 

agent = Agent(reactor, bindAddress=("10.0.0.1", 0)) 

そして、通常の方法でagentを使用。

+0

ありがとう、これを見せてくれます – Claudiu

関連する問題