Я сижу в инете у одного провайдера. мой IP a.b.c.d при выходе в нет например (хотя smtp cерверы говорят что у меня другой IP f,g,h,i когда им helo говориш? причем этот f,g,h,i постоянный, меняются динамически только c.d в моем gethostbyname() адрессе). Делаю обычный bind() на IN_ADDRANY и listen на какойто порт (сервер готов). Сам я на него со своего компа зайти могу, а друг мой (коннектится в нет через другого провайдера) я ему даю свой IP a.b.c.d и он не может на него зайти? в чем проблема?
Это называется динамический IP. Раз smtp дают другой адрес - значит у провайдера стоит firewall или NAT. Короче, как клиент ты можешь работать по всем портам, которые открыты у провайдера, а как сервер вряд ли. Ты должен договорится с админом сервера, чтобы там делалась переадресация портов сервера. В любом случае твой друг должен будет задавать для связи адрес f.g.h.i - просто сейчас система знает только про твои клиентские порты и переадресует их, а про серверные надо ей статически задавать !
Но через ftf например, подключаюсь к серверу, для канала передачи данных открываю порт xx на своем IP a.b.c.d начинаю его слушать и говорю ftf серверу что "port a,b,c,d,x,x" он мне говорит все +OK и передает запрошенные данные на этот порт? Пример: clnt: port a,b,c,d,15,160 //port 4000 serv: 200 OK //начинаю слушать у себя port 4000 clnt: list serv: //посылает мне данные я их читаю с порта 4000 В логах фаервола: openinbound ftf.serverIP a,b,c,d 20 5001 close ftf.serverIP a,b,c,d 20 5001 как он подключился к порту 5001 я то слушал 4000 и на него получал данные и TcpTable давала что у меня 4000 открыт (хоть какой порт открываю для ftf сервера в логе только 5001,5002, и т.д.). Причем после первой же команды и передачи даныых мне на порт "4000" последующие не дают никакого результата? делаю например после list retr filename ftf мне что адрес уже in use и все дальше от него ни слова ни на любую команду а в логе фаервола его droped пакеты с его порта 20 на порты 5002? Ладно пытаюсь у себя открыть порты 5001 и 5002 чтобы их слушать, хрен sock error Address already in use! но TcpTable говорит что у меня нет таких открытых портов (всегда есть открытый порт 5000 (я его не открывал))? Что это за адресация такая?