Форум сайта python.su
Привет
Есть сервер под freebsd, к сетевому интерфейсу помимо основного IP адреса (A) привязано еще N алиасов (B1,B2,B3,BN).
Есть программа скачивающая что-то по сети и она использует asyncore. По умолчанию, программа коннектится с основного IP адреса - A. Необходимо научить программу конектится с других адресов.
Собственно я попробовал просто вызывать метод self.bind((BN, port)) и оно вроде работает (см листинг). Вопрос только в том какой указывать порт и чем это может грозить. Стоит ли указывать случайный порт >1024 или нормально всегда указывать одинаковый? У меня примерно 600 потоков работает.
Может быть кто сталкивался уже с такой задачей?
Вот тестовая программа:
import asyncore, socket
class http_client(asyncore.dispatcher):
def __init__(self, host, path):
asyncore.dispatcher.__init__(self)
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
self.bind(('1.1.1.1', 11111))
self.connect( (host, 80) )
self.buffer = 'GET '+path+' HTTP/1.0\r\n'
self.buffer += 'User-Agent: Mozilla/1.0\r\n'
self.buffer += '\r\n';
def handle_connect(self):
pass
def handle_close(self):
self.close()
def handle_read(self):
print self.recv(8192)
def writable(self):
return (len(self.buffer) > 0)
def handle_write(self):
sent = self.send(self.buffer)
self.buffer = self.buffer[sent:]
c = http_client('whatismyip.org', '/')
asyncore.loop()
Офлайн
Нужно настраивать не программу, а таблицу маршрутизации.
Офлайн
j2aконечные адреса заранее не известны
Нужно настраивать не программу, а таблицу маршрутизации.
Офлайн
ноль в качестве порта поставь, он тогда будет брать любой доступный порт >1024
Офлайн
redixinВот это то что надо, жаль сам не додумался :-) Работает!
ноль в качестве порта поставь, он тогда будет брать любой доступный порт >1024
cat /etc/pf.conf.my
nat on bge0 from 1.1.1.1/32 to any -> 2.2.2.2
pass in
pass out
Отредактировано (Авг. 14, 2007 15:13:18)
Офлайн