Модераторы: Snowy, Poseidon, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как лучше всего узнать IP машины 
:(
    Опции темы
boobie
Дата 8.8.2013, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 16.9.2011

Репутация: нет
Всего: нет



Здравствуйте! Как лучше всего узнать свой внешний IP-адрес (IPv4 или IPv6)? А в случае его отсутствия - IP адрес в локальной сети.
Сначала думал вытащить его из результата выполнениния команды ipconfig, но это не всегда работает, т.к. может быть несколько соединений или сетевых карт.
С помощью чего и куда подключаться для получения внешнего ip (v4 и v6)?

PM   Вверх
Alexeis
Дата 8.8.2013, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 2
Всего: 459



Какой бы ни был способ, адаптеров может быть много и IP адресов тоже может быть много. Есть способ получения текущего активного, на котором висит инет. Если это то что нужно, то делается через WinAPI по имени компа. У меня где-то был примерчик.

Добавлено через 7 минут и 35 секунд
gethostname позволяет узнать сетевое имя текущего компа. gethostbyname позволяет узнать IP адрес по имени хоста. Но IP будет последнего адаптера который установил соединение. Это вполне может быть wifi или еще что. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
boobie
Дата 8.8.2013, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 16.9.2011

Репутация: нет
Всего: нет



Т.е. как выполнять соединение? Если это ip wi-fi, то законнектиться не получится?
Alexeis
Эмм... IPv4-адрес эти функции возвращают, а что делать с IPv6? Яндекс выдает мне оба адреса на запрос "my ip". IdIPWatch1.LocalIP выдает мне IPv4-адрес локальной сети. 

Фигня какая-то...

Это сообщение отредактировал(а) boobie - 8.8.2013, 13:11
PM   Вверх
Alexeis
Дата 8.8.2013, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 2
Всего: 459



Ну как, кабель воткнул, адаптер считает, что есть соединение. Wifi подключился к сети, считает что есть соединение. Не в смысле сокетов соединение. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
boobie
Дата 8.8.2013, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 16.9.2011

Репутация: нет
Всего: нет



Цитата(Alexeis @ 8.8.2013,  13:10)
Ну как, кабель воткнул, адаптер считает, что есть соединение. Wifi подключился к сети, считает что есть соединение. Не в смысле сокетов соединение.

И у каждого свой ИП-адрес?
И как тогда пользоваться, например, Инди-компонентами? Какой клиенту ИП передавать?

Это сообщение отредактировал(а) boobie - 8.8.2013, 13:14
PM   Вверх
Alexeis
Дата 8.8.2013, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 2
Всего: 459



  Если адаптеры не включены в мост, то у них разные IP .  Т.е. почти всегда разные. Как работать зависит от ситуации. Если нужно с инетом работать, то через gethostbyname будет нужный IPшник, тот через который получают инет. А так по разному может быть. Как иначе выбрать нужную сеть если не по IPшнику адаптера?


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
boobie
Дата 8.8.2013, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 16.9.2011

Репутация: нет
Всего: нет



А если пользователь с роутером "создает" сервер, дает мне свой АйПи, полученный с помощью gethostbyname, то я не смогу к нему подключится по данному АйПи... Как подключаться в таком случае?

Это сообщение отредактировал(а) boobie - 8.8.2013, 15:17
PM   Вверх
Alexeis
Дата 8.8.2013, 15:55 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 2
Всего: 459



  За роутером траблы. Чтобы работал сервер за роутером нужно делать перенаправление портов на роутере. Насколько я знаю, самое правильное решение для конекта таких пользователей это установка соединения через промежуточный сервер. Например установить VPN типа Hamachi . 
  Вообще, в настоящее время как-то научились обходить роутеры (я имею ввиду pnp сети типа торрентов) . Насколько я знаю, используется технология UPnP автоматического перенаправления портов. Можно почитать например тут http://www.codeproject.com/Articles/27346/...on-using-the-UP .



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Illusion Dolphin
Дата 8.8.2013, 18:50 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 2
Всего: 63



Чтобы узнать "внейший" айпи единственный версый спобоб это:
1) Сделать простенький сайт который отвечает на GET строкой с IP юзера
2) Разместить его в интернете
3) Из программы запросить сайт 
4) Профит

Всё остальное в какой-либо ситуации будет не работать.

Добавлено через 1 минуту и 52 секунды
Но работать будет только если есть соединение с "внешним миром", само сабой разумеется, т.к. иначе у вас может и не быть "внешнего" адреса. 


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
Alexeis
Дата 8.8.2013, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 2
Всего: 459



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


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Illusion Dolphin
Дата 8.8.2013, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 2
Всего: 63



Цитата

он нужен для того чтобы запустить сервер на машине

Чтобы запустить сервер он как раз таки не нужен smile. Нужно просто сетевое соединение, на которое можно биндиться (bind). На этом сервер запущен.
А дальше вопрос соединения 2х машин. Тут есть много вариантов. Обычно нормальный сервер доступен "извне", что означает, что если внешний пользователь запросит какой-то арес и порт то в конечном итоге  запрос дойдёт до сервера. На этом пути могут стоять маршрутизаторы, NAT и прочие сетевые устройства, даже ADSL. Но всё это проблемы серверной части, клиент просто соединяется и всё. 
В вашем случае не понятно, что за сервер, какая конфигурация сети и кто такой пользователь и что он имеет. Если уточните - будет можно давать советы, а так как-то слишком пусто.


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
boobie
Дата 9.8.2013, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 16.9.2011

Репутация: нет
Всего: нет



Ну я разбираюсь с Инди-библиотекой... Простенький чат, например. Предположим, у меня есть Айпи моего друга, я пытаюсь отправить ему сообщение. Но у него стоит роутер. Дойдет ли до него мое сообщение?
Вот, максимально упрощенный код: 2 Memo, 1 Button, при нажатии на кнопку отправляется содержимое Memo1. Коннект происходит при создании формы. IP вводится в idTCPClient1.Host перед компиляцией:
Код

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, IdContext, IdCustomTCPServer,
  IdTCPServer, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.Buttons;

type
  TForm1 = class(TForm)
    IdTCPClient1: TIdTCPClient;
    IdTCPServer1: TIdTCPServer;
    Button1: TButton;
    Memo1: TMemo;
    Memo2: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button1Click(Sender: TObject);
    procedure IdTCPServer1Execute(AContext: TIdContext);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var s:string;
i:integer;
begin
for I := 0 to memo1.Lines.Count-1 do
begin
s:=memo1.Lines.Strings[i];
idtcpclient1.IOHandler.WriteLn(s);
end;

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
idtcpclient1.Disconnect;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
idtcpserver1.Active:=true;

idtcpclient1.Connect;
end;

procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var s:string;
begin
s:=acontext.Connection.IOHandler.ReadLn();
memo2.Lines.Add(s);
end;

end.

Тут как бы неважна конкретная задача. Я пихаю IP в idTCPClient1.Host и Инди делает все за меня. Вопрос в том, какой Ip туда пихать. 


И как в таком случае настраивать серверную часть, чтобы не смотря на
Цитата

маршрутизаторы, NAT и прочие сетевые устройства, даже ADSL.

клиент подключился?

Это сообщение отредактировал(а) boobie - 9.8.2013, 08:40
PM   Вверх
Illusion Dolphin
Дата 9.8.2013, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 2
Всего: 63



Цитата

Но у него стоит роутер. Дойдет ли до него мое сообщение?

Роутер - это слишком обще smile Ну вот смотрите (если я не прав - поправьте) - вы клиент, у вас есть прямой доступ в интернет, у вашего друга тоже есть интернет, но там до интернета есть "ещё что-то" (т.к. "роутер" ни о чём не говорит, на дороге к другу там куча роутеров, их можно увидеть через "tracert public_ip_address". Тут интересно, как друг заходит в интернет. Если это что-то типа VPN/PPPoE поднятое на его машине - то тогда велика вероятность что IP этого соединения и есть внешний IP, в таком случае он заходит на сайт что-то типа http://2ip.ru/ и даёт вам адрес, предварительно, размереется, отключив firewall на нужном порту у себя. Вы соединяетесь по этому адресу и профит. Если там есть что-то вроде NAT (что часто бывает на "роутере" перед клиентом), то тогда на нём надо пробросить порт чтобы внешнее соединение пробрасывалось на локальный компьютер. Если что-то другое - дайте больше делатей попробую помочь.


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
boobie
Дата 9.8.2013, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 16.9.2011

Репутация: нет
Всего: нет



Эмм... Несколько усложненная версия чата (с вводом ИП) с таким же принципом работает криво. 
Друг сообщает мне свой IP (результат запроса "my ip" в яндексе), я - свой. У него есть роутер, он зашел в инет с ноута (по ВиФи). У меня роутера нет, мой Ip - реальный (т.е. меня по этому ip можно просечь, хакнуть и т.д.) адрес машины в сети.
Ко мне он коннектится нормально, сообщения от него доходят, а я не могу законнектится к нему.

Насколько я понимаю, он сообщает мне адрес своего роутера, т.е. его выдает поисковик. А роутер затем уже перенаправляет на подключенное устройство. 
Что делать в этом случае?

----------------------------------------------------

Порты проверять? idtcpserver.defaultport=7000, сервер прослушивает порт 7000, idtcpclient.port = 7000, клиент отправляет строки на порт 7000. 
Если у него 7000 порт закрыт, то смог бы он мне отправить строку?

----------------------------------------------------

Цитата

Если там есть что-то вроде NAT (что часто бывает на "роутере" перед клиентом), то тогда на нём надо пробросить порт чтобы внешнее соединение пробрасывалось на локальный компьютер. Если что-то другое - дайте больше делатей попробую помочь.

И как это реализовывать?

----------------------------------------------------
ipconfig выдает у него только адрес в локальной сети. 

Тему надо назвать "как настроить idtcpserver, если у вас стоит роутер\прокси\и пр." 

Это сообщение отредактировал(а) boobie - 9.8.2013, 13:48
PM   Вверх
Alexeis
Дата 9.8.2013, 13:48 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 2
Всего: 459



Цитата(boobie @  9.8.2013,  14:19 Найти цитируемый пост)
Насколько я понимаю, он сообщает мне адрес своего роутера, т.е. его выдает поисковик. А роутер затем уже перенаправляет на подключенное устройство. 
Что делать в этом случае?

  В роутерах перенаправление часто задается как Virtual Server. Указывается локальный IP компа и порт (диапазон портов), в этом случае роутер будет перенаправлять входящий запрос своего IP на входящий запрос локального IP с указанным портом. Т.е. сервер за рутерем биндит свой локальный IP к порту, а клиент,т.е. ты контектится по внешнему IP. Рутер же будет транслировать пакет, так как если бы он шел с локальным IP, в результате сервер сможет опознать входящий запрос и создаст по нему сокет. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1250 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.