python: urllib2 с использованием другого сетевого интерфейса

У меня есть следующий код:

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

Он работает на машине с двумя сетевыми интерфейсами. Я хотел бы указать, какой интерфейс мне нужен для использования кода. В частности, я хочу, чтобы он использовал тот, который отличается от того, который он использует по умолчанию … но я могу выяснить, что именно, если я могу просто выбрать интерфейс.

Какой самый простой / лучший / самый питонический способ сделать это?

Еще не полное решение, но если вы используете только простые объекты сокетов, вы можете сделать то, что вам нужно:

 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)) 

Таким образом, вы заставите систему привязать сокет к требуемому сетевому интерфейсу.

Если вы используете twisted.web.client.Agent Twisted, вы можете достичь этого через:

 from twisted.internet import reactor from twisted.web.client import Agent agent = Agent(reactor, bindAddress=("10.0.0.1", 0)) 

А затем с использованием agent обычным способом.