Как вы получаете IP-адрес с удаленного компьютера? - PullRequest
1 голос
/ 10 марта 2009

Я пишу код на С ++, который мне нужно запустить как в Windows, так и в Linux, и ищу вызов функции, который вернет IP-адрес окна, на котором запущено приложение. Есть ли такой?

Ответы [ 5 ]

1 голос
/ 10 марта 2009

Вызовите socket (), затем getsockname ().

1 голос
/ 10 марта 2009

Вы можете сделать это, но обычно это плохая идея.

ioctl SIOCGIFCONF, как описано в "man netdevice", объясняет это.

Причина, по которой это плохая идея, в том, что вы, вероятно, не получите от нее того, что хотите.

Машина может иметь несколько или несколько IP-адресов, вы не будете знать, какой из них общественности. Это может быть за шлюзом NAT (или несколько), в этом случае ни один из них может быть общедоступным.

Вы просто не можете использовать эту информацию особенно полезно. Что бы вы ни хотели, это вероятно, это не очень хорошая идея.

1 голос
/ 10 марта 2009

Если вы можете использовать повышение, посмотрите на
Как получить IP-адреса boost :: asio :: ip :: tcp :: socket?

0 голосов
/ 10 марта 2009

Если вы знаете имя машины, на которой запускается ваше приложение, просто используйте gethostbyname ().

0 голосов
/ 10 марта 2009

Лучшая идея - использовать веб-сервис. Подключитесь к известному серверу, отправьте обратно IP-адрес, который вы использовали для связи с ним. Это скажет вам IP-адрес (ОК, и IP-адрес), который ваш компьютер использует при общении с внешним миром.

Возможные исключения и почему они не имеют значения:

  • Вы получаете адрес устройства NAT - ну, в таком случае, на вашем компьютере нет интернет-адреса, что вы планируете делать с адресом 10.x.y.z, который у вас, вероятно, есть?
  • Вы вообще не получаете адрес, так как вы не подключены к Интернету - если вы не можете подключиться, маловероятно, что другой компьютер сможет сделать что-нибудь полезное с вашим IP-адресом.
  • Вы получаете обратно IP, но никто не может подключиться к нему - вы, вероятно, находитесь за фильтрующим межсетевым экраном, который отклоняет любое входящее соединение. Маловероятно, что брандмауэр будет принимать трафик на другой IP-адрес, который подключается к тому же компьютеру. Даже если это так, это может быть невозможно обнаружить. И это был бы ад для FTP.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...