[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: socket_getsockname проблема
I++
Очередной подводный камень...

Есть такая замечательная функция как socket_getsockname

Но проблема в том, что если машина на которой исполняется скрипт находится за натом, socket_getsockname возвращает локальный IP адрес, а не натовский.

Какие будут предложения по решению данной траблы?

кстати перед выполнением socket_getsockname использую вот такое:

$fd = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($fd, '0.0.0.0');
socket_connect($fd, 'example.com', '12345');


Естественно socket_getsockname дергаю уже после подключения, иначе он вернет 0.0.0.0

На машине много IP адресов и маршрутизация очень разнообразна до example.com может ходить с адреса 192.168.0.34 а на example.net через 10.10.10.63 а на example.ru через 10.10.20.44

При этом:

192.168.0.34 до example.com ходит без ната.
10.10.10.63 до example.net ходит через нат, 10.10.10.1
10.10.20.44 до example.ru маскарадится в 192.168.0.1 потом маскарадится в 10.10.10.1

Есть идеи? :D



Спустя 44 минуты, 56 секунд (10.04.2012 - 14:46) I++ написал(а):
Ох... ладно пойду исходники курить одной проги, может смогу из С++ перевести в PHP. Если, что нарою отпишусь!

Спустя 12 минут, 5 секунд (10.04.2012 - 14:58) I++ написал(а):
Кароче покурил исходник одной проги, там юзается http://checkip.dyndns.com

Вот так и узнается внешний IP laugh.gif

Спустя 25 минут, 23 секунды (10.04.2012 - 15:24) killer8080 написал(а):
I++
тебе нужно было определить ip example.com? В смысле домена к которому конектишься?

Спустя 1 час, 47 минут, 20 секунд (10.04.2012 - 17:11) I++ написал(а):
Нет свой локальный (внешний, который в интернетах виден), я прикрутил нужный функционал, просто пинаю dyndns парсю и вуаля. Потом сравниваю, при конекте, что выдает сокпирнэйм и то, что получил с dyndns и таким образом узнаю, за натом я или нет.

Спустя 4 часа, 14 минут, 38 секунд (10.04.2012 - 21:26) killer8080 написал(а):
Цитата (I++ @ 10.04.2012 - 17:11)
Потом сравниваю, при конекте, что выдает сокпирнэйм и то, что получил с dyndns и таким образом узнаю, за натом я или нет.

Ничего не понял. Сам же говорил, что маршрутизация сложная
Цитата (I++ @ 10.04.2012 - 14:01)
При этом:

192.168.0.34 до example.com ходит без ната.
10.10.10.63 до example.net ходит через нат, 10.10.10.1
10.10.20.44 до example.ru маскарадится в 192.168.0.1 потом маскарадится в 10.10.10.1

Что тебе даст dyn.dns, если ты не знаешь через какой шлюз пойдут пакеты?

PS у тебя там что, куча сетевых интерфейсов?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.