Как получить локальный IP из кода расширения Firefox - PullRequest
3 голосов
/ 13 марта 2012

Я пишу расширение Firefox, которое использует nsIServerSocket для прослушивания соединений с сокетами.Я ищу способ для кода расширения, чтобы программно узнать адрес локальной сети компьютера, на котором работает расширение Firefox.Эта информация передается клиенту в локальной сети вне диапазона, так что он может открыть сокетное соединение с добавочным номером.

Мои исследования в этом направлении до сих пор находили только людей, желающих найти IP-адрес.адрес загруженных веб-сайтов с помощью разрешения DNS или с использованием Java-апплетов ), что не подходит для расширения FF.На страницах разработчика Mozilla в Geolocation API упоминаются:

"данные обмениваются, включая данные точки доступа WiFi, токен доступа (аналог двухнедельного cookie) и пользователяIP-адрес "

, но не указывает API для прямого доступа к IP-адресу пользователя.

На данный момент моя единственная идея - вызвать локальный процесс, используя nsIProcess и разбери IP оттуда.Это кажется ужасно хакерским и должно быть обработано отдельно для каждой ОС.Т.е. я запускаю ifconfig, netcfg, ipconfig?С какими аргументами?

Кто-нибудь знает о лучшем решении?

Ответы [ 2 ]

1 голос
/ 14 марта 2012

Вы также используете nsIDNSService интерфейс и здесь - у него есть свойство myHostName, которое может быть разрешено:

var dns = Components.classes["@mozilla.org/network/dns-service;1"]
                    .getService(Components.interfaces.nsIDNSService);
var myName = dns.myHostName;
var record = dns.resolve(myName, 0);
while (record.hasMore())
  alert(record.getNextAddrAsString());

Вы должны ожидать, что он выдаст несколько адресов, а невсе они будут действительны - даже для локальной сети вы получите как минимум два адреса (IPv6 и IPv4), в дополнение к этому вы можете получить адрес Teredo, адреса от виртуальных адаптеров, установленных VMWare & Co. и т. д.

0 голосов
/ 14 марта 2012

Держу пари, что IP-адрес, указанный в Geolocation API, не является IP-адресом локального компьютера. Я имею в виду, где в мире 192.168.0.100, хм? В общем, это просто бесполезная информация.

Поскольку вы имеете дело с локальной сетью, не могли бы вы создать небольшую веб-страницу, которая просто распечатывает адрес клиента? Затем вы можете узнать свой IP, запросив эту веб-страницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...