Получить свой внешний IP средствами С#

Программирование на Юнити.

Получить свой внешний IP средствами С#

Сообщение Neodrop 25 янв 2010, 22:40

Кто-нить в курсе как узнать внешний IP средствами (c#) ?
Я нашел только про локальный... :-?
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Получить свой внешний IP средствами С#

Сообщение WebWolf 25 янв 2010, 23:06

Neodrop писал(а):Кто-нить в курсе как узнать внешний IP средствами (c#) ?
Я нашел только про локальный... :-?

Вот это подойдет?
Код: Выделить всё
IPHostEntry host = Dns.GetHostByName(Dns.GetHostName());
            textBox1.Text = host.AddressList[0].ToString();

У меня внешний показывает)
WTF? _WolfGames3D.com / Все в Tanks Heroes Вконтакте!
Аватара пользователя
WebWolf
Старожил
 
Сообщения: 532
Зарегистрирован: 19 дек 2009, 15:49
Откуда: Russian Federation
  • Сайт
  • ICQ

Re: Получить свой внешний IP средствами С#

Сообщение Neodrop 25 янв 2010, 23:11

Нет. Это локальный адрес. А нужен тот, что за роутером. Как на пример на http://www.myip.ru
Ну, может это в моем случае не пашет.
Это я пробовал. Получаю адрес локалки. А выход в сеть через общий ADSL модем с роутером.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Получить свой внешний IP средствами С#

Сообщение WebWolf 25 янв 2010, 23:18

Neodrop писал(а):Нет. Это локальный адрес. А нужен тот, что за роутером. Как на пример на http://www.myip.ru
Ну, может это в моем случае не пашет.
Это я пробовал. Получаю адрес локалки. А выход в сеть через общий ADSL модем с роутером.


Короче тебе нужно воспользоваться сервисом.. тем что ты указал) http://www.myip.ru
WTF? _WolfGames3D.com / Все в Tanks Heroes Вконтакте!
Аватара пользователя
WebWolf
Старожил
 
Сообщения: 532
Зарегистрирован: 19 дек 2009, 15:49
Откуда: Russian Federation
  • Сайт
  • ICQ

Re: Получить свой внешний IP средствами С#

Сообщение Avatarchik 25 янв 2010, 23:19

Вот статейка Организация сервера с динамическим ip в домашних условиях
http://mr-grey.studenthost.ru/post/2010/01/04/Organizaciya-servera-s-dinamicheskim-ip-v-domashnih-usloviyah.aspx
Добавить ava-karaban в Skype
Аватара пользователя
Avatarchik
UNITрон
 
Сообщения: 274
Зарегистрирован: 04 апр 2009, 15:36
Откуда: Украина(Донецк)
  • ICQ

Re: Получить свой внешний IP средствами С#

Сообщение BlackCat 27 янв 2010, 04:08

Вам не это ли нужно:
http://unity3d.com/support/documentatio ... dress.html
?

И хоть это жаваскрипт, думаю что не составит большого труда это на С# перевести.

Network.HavePublicAddress
static function HavePublicAddress () : bool
Description

Check if this machine has a public IP address.

It checks all the network interfaces for IPv4 public addresses and returns true if one address is found.
(js)
Код: Выделить всё
function OnGUI() {
    if (GUILayout.Button ("Start Server"))
    {
        // Use NAT punchthrough if no public IP present
        Network.useNat = !Network.HavePublicAddress();
        Network.InitializeServer(32, 25002);
        MasterServer.RegisterHost("MyUniqueGameType",
            "JohnDoes game", "l33t game for all");
    }
}

BlackCat
UNец
 
Сообщения: 18
Зарегистрирован: 24 янв 2010, 21:01

Re: Получить свой внешний IP средствами С#

Сообщение Neodrop 27 янв 2010, 12:51

Дорогой мой, спасибо за копипаст справки. Но мне нужно чисто средствами шарпа, а не [unity 3D] Unity. Поверьте на слово, справку я знаю очень хорошо. :D
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Получить свой внешний IP средствами С#

Сообщение BlackCat 27 янв 2010, 17:15

Ну тогда звиняйте, хотел помочь. :(
BlackCat
UNец
 
Сообщения: 18
Зарегистрирован: 24 янв 2010, 21:01

Re: Получить свой внешний IP средствами С#

Сообщение 6opoDuJI0 31 янв 2010, 18:41

вообще, когда хочеш узнать свой айпи адрес ,соответствующая функция(по крайней мере, в WINAPI так) возвращает не айпи,а указатель на массив всех ваших айпишников,а уже потом обращением по адресу addr+N можно получить свой айпи. первым идёт локальный адрес(хотя когда как) а потом уже идут все остальные айпишники.возможно тожесамое можно сделать средствами C# или JAVA
А вам тоже нравится в мороз выпускать изо рта тонкую струйку пара и чувствовать себя драконом?:)
Аватара пользователя
6opoDuJI0
UNIт
 
Сообщения: 85
Зарегистрирован: 06 янв 2010, 20:00

Re: Получить свой внешний IP средствами С#

Сообщение Zaicheg 31 янв 2010, 19:20

6opoDuJI0 писал(а):вообще, когда хочеш узнать свой айпи адрес ,соответствующая функция(по крайней мере, в WINAPI так) возвращает не айпи,а указатель на массив всех ваших айпишников,а уже потом обращением по адресу addr+N можно получить свой айпи. первым идёт локальный адрес(хотя когда как) а потом уже идут все остальные айпишники.возможно тожесамое можно сделать средствами C# или JAVA

Насколько я понимаю, требуется узнать адрес роутера, а не локального компьютера.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Получить свой внешний IP средствами С#

Сообщение 6opoDuJI0 31 янв 2010, 19:29

Neodrop писал(а):А нужен тот, что за роутером.

если я всё правильно понимаю, адрес ЗА роутером и адрес самого роутера, разные вещи
А вам тоже нравится в мороз выпускать изо рта тонкую струйку пара и чувствовать себя драконом?:)
Аватара пользователя
6opoDuJI0
UNIт
 
Сообщения: 85
Зарегистрирован: 06 янв 2010, 20:00

Re: Получить свой внешний IP средствами С#

Сообщение Jakobs 31 янв 2010, 23:08

Теоретически... чтоб увидеть адрес за роутером, надо сервер за роутером что будет принимать запрос и отправлять обратно с данными ипишника, этом в том случие если запрос сделан с сети под роутером в сеть за роутером...
Эсли на оборот и в виндовсе то в качестве идентификатора можно использовать мак адрес, и по идентификатору вытянуть данные о ип из роутера...
других методов не знаю =)
Аватара пользователя
Jakobs
UNIт
 
Сообщения: 103
Зарегистрирован: 08 янв 2010, 01:09
Откуда: Киев, Украина
  • Сайт
  • ICQ

Re: Получить свой внешний IP средствами С#

Сообщение 6opoDuJI0 31 янв 2010, 23:11

Вот, нашел распечатки статей по винапи.чтобы получить указатель на список адресов компа, надо сначала получить имя компьютера(вызов процедуры gethostname( buffer, buffersize) где первый параметр это указатель на массив байт, а второй-размер этого массива), после чего получаем указатель на структуру hostent вызвав функцию gethostbyname( buffer ), где buffer это указатель на последовательность байт, куда мы вписали предыдущей процедурой имя компьютера, и возвращает указатель.из чего состоит hostent:
Код: Выделить всё
hostent STRUCT
h_name DWORD? ;(CHAR FAR*)
h_alias DWORD  ?
h_addr WORD?
h_len WORD?
h_list DWORD?; CHAR FAR * FAR *
hostent ENDS

элемент h_list и есть указатель на массив указателей на айпи адреса, но они представлены в виде сетевого порядка байт(тут вы получаете первый айпи, чтобы получить остальные, побродите по массиву).чтобы перевести в читаемый строковый вид (вида 127.0.0.1), преобразуем его через inet_ntoa(функции используемые тут, наверняка есть в сишарпе и яве, и работают наверняка соответственно)
А вам тоже нравится в мороз выпускать изо рта тонкую струйку пара и чувствовать себя драконом?:)
Аватара пользователя
6opoDuJI0
UNIт
 
Сообщения: 85
Зарегистрирован: 06 янв 2010, 20:00

Re: Получить свой внешний IP средствами С#

Сообщение Altodor 11 окт 2011, 23:27

Немного перефразирую вопрос. Я хочу создать сокет на сервере методом new TcpListener(ipAddress, port); Теперь запускаю на другом компьютере программу с кодом TcpClient client = new TcpClient(ipToConnect, Convert.ToInt32(portToConnect));, где ipToConnect==ipAddress. Всеми методами c#, которые я нашёл, мне выдаёт, что мой ipAddress=127.0.0.1, что есть просто локальный адрес, и удалённая машина его не видит. Как методами c# узнать свой ip, к которому реально может подключиться любой удалённый компьютер?
Altodor
UNIт
 
Сообщения: 82
Зарегистрирован: 19 сен 2010, 07:58

Re: Получить свой внешний IP средствами С#

Сообщение DbIMok 12 окт 2011, 00:42

Altodor писал(а):методом new TcpListener(ipAddress, port);

Этот конструктор позволяет указать локальный IP-адрес и номер порта, на котором производится ожидание входящих попыток подключения.

это так, к делу не относится.
Altodor писал(а):Как методами c# узнать свой ip, к которому реально может подключиться любой удалённый компьютер?

вот в этом суть вопроса. незачем серверу знать свой IP адрес. он висит на одном (или всех) локальных интерфейсах и слушает порт (порты). клиент адрес знать конечно должен. но ему не нужен код, чтобы его узнать. он соединяется, получая адрес по имени через DNS (что, конечно, лучший вариант) либо вы его заранее должны забить в клиент, либо клиент может его получать из какого-то другого известного места, в общем не важно. и так, вы заходите на какой-нибудь http://www.whatismyip.com/ (их куча подобных сервисов) вот он ваш текущий адрес. адрес меняется? настройте http://www.no-ip.com/services/managed_d ... c_dns.html (обычно в роутерах-модемах уже есть страничка для настройки подобных сервисов). если вы торчите своим Ethernet концом прямо с белым IP в интернете, то вот оно счастье (в таком случае есть шанс и получить адрес напрямую с интерфейса). но большинство пользователей находятся за NAT (учитывая уровень знаний большинства, к счастью). и тут мы вплотную подходим к тому, почему сеть [unity 3D] так организована. зачем все эти мастер серверы, фацилитаторы и прочие "ненужные" прибамбасы.
вот есть у нас некий внешний адрес 8.8.8.8. и он не совпадает с нашим локальным адресом (т.е. это адрес роутера или вообще провайдера, как повезет). клиент соединяется с этим адресом, каким-то портом, а там этот порт никто не слушает и куда дальше пакет в "локальную" сеть отправлять конечно не знает. может вы за ним один сидите, тогда можно прописать перенаправление пакетов на определенный порт определенного локального адреса. а может так случиться, что за этим адресом скрывается городок со 100500 жителей и тогда уж точно вам никто никуда не перенаправит. это я к тому, что знание внешнего адреса не панацея.
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

След.

Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4