Форум программистов, компьютерный форум, киберфорум
Delphi: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/263: Рейтинг темы: голосов - 263, средняя оценка - 4.73
(Yellow_Duck)
 Аватар для MadMag
1261 / 130 / 15
Регистрация: 16.10.2008
Сообщений: 733

Как узнать IP адрес своего компьютера.

27.12.2008, 14:14. Показов 52165. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет, мне надо, что бы программа, исскала ИП адрес компьютера на котором она стоит, причем мне надо чтобы это бы не тот ип, который пишется в состоянии подключения, а тот который к примеру можно посмотреть тут:
http://www.myip.ru/
Может можно сделать, чтобы программа заходила сюда как-то сама, и считывала инфу?
спасибо

Добавлено через 14 часов 24 минуты 16 секунд
НУ помогите, плиз ))))
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.12.2008, 14:14
Ответы с готовыми решениями:

Как узнать входящий порт своего компьютера?
У меня дома кабель провайдера заходит в роутер,через лан подключен мой комп и через другой лан IP камера.Я создал хост на динднсе,...

Как программно узнать характеристики своего компьютера?
Как программно узнать характеристики своего компьютера? процессор , озу , разрядность , винду , имя пользователя и тд? Наведите пример...

Как программно узнать характеристики своего компьютера?
Как программно узнать характеристики своего компьютера? процессор , озу , разрядность , винду , имя пользователя и тд? Наведите пример...

18
Почетный модератор
 Аватар для Humanoid
11551 / 4346 / 452
Регистрация: 12.06.2008
Сообщений: 12,452
27.12.2008, 15:41
Скачай страницу с этого сайта... мы видим, что он представляет из себя:
HTML5
1
2
3
4
5
6
<BODY bgcolor=white>
<TABLE width=100% height=100% cellspacing=0 cellpadding=0 border=0><TD align=center valign=middle>
<TABLE width=500 height=100 cellspacing=0 cellpadding=0 border=0>
<TR><TD bgcolor=#43AA2E><TABLE width=500 height=100 cellspacing=1 cellpadding=4 border=0>
  <TR><TD bgcolor=#E0EED3 height=30 align=center valign=middle><B>Ваш IP-адрес</B></TD></TR>
  <TR><TD bgcolor=white align=center valign=middle>91.78.229.139</TD></TR>
Значит, надо пропустить 3 тега <TABLE, потом 2 тега <TD... после этого пропустить закрытие тега, и отсюда начинается сам IP до открытия нового тега. Если код страницы содержится в переменной S
Delphi
1
2
3
4
5
6
7
8
9
10
11
Uses StrUtils; // Что бы использовать PosEx
Var P : Integer;
Begin
  P := Pos('<TABLE',S);  // Нашли первую таблицу
  P := PosEx('<TABLE',S,P+1); // Вторую таблицу
  P := PosEx('<TABLE',S,P+1); // Третью таблицу
  P := PosEx('<TD',S,P+1); // Первый TD
  P := PosEx('<TD',S,P+1); // Второй TD
  P := PosEx('>',S,P+1); // TD закрылся
  Delete(S,1,P);  // Удаляем всё до IP адреса
  S := Copy(S,1,Pos('<',S)-1);  // Копируем IP адрес до начала следующего тега
Теперь S содержит IP адрес. Как будешь скачивать не знаю... лично я использую самодельный компонент... но говорят, что есть стандартный TBrowser
0
(Yellow_Duck)
 Аватар для MadMag
1261 / 130 / 15
Регистрация: 16.10.2008
Сообщений: 733
06.01.2009, 17:42  [ТС]
Да так понятно, я сделал, тока еще одна проблемка, когда делаешь навигацию браузера, то форма становится видима((
Не знаете, как избавиться?
0
 Аватар для GalaX
701 / 573 / 59
Регистрация: 18.11.2008
Сообщений: 2,147
06.01.2009, 18:42
а нафига вообще браузер какой-то нужен? не проше ли просто страницу качнуть?
да, и не проще ли этот ip регуляркой найти?:
(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})
или так:
((?:\d{1,3}\.){3}\d{1,3})
0
 Аватар для Ranger
12 / 12 / 2
Регистрация: 03.10.2008
Сообщений: 437
27.02.2009, 23:29
А мне наоборот нужен локальный IP который прописан в подключении
0
Почетный модератор
 Аватар для Humanoid
11551 / 4346 / 452
Регистрация: 12.06.2008
Сообщений: 12,452
28.02.2009, 11:24
Цитата Сообщение от Ranger
А мне наоборот нужен локальный IP который прописан в подключении
Я делал так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
Function TForm1.GetLocalIP : String;
Var WSAData: TWSAData;
    P: PHostEnt;
    Name: array[0..$FF] of Char;
Begin
  WSAStartup($0101, WSAData);
  GetHostName(Name, $FF);
  P := GetHostByName(Name);
  Result := inet_ntoa(PInAddr(P.h_addr_list^)^);
  WSACleanup;
End;
0
 Аватар для O][o7n1k
8 / 8 / 1
Регистрация: 26.02.2009
Сообщений: 65
28.02.2009, 20:39
Предлагаю такой вариант решения проблемы:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function GetLocalHostAddress: string;
var
  SockAddrIn: TSockAddrIn;
  HostEnt: PHostEnt;
  szHostName: array[0..128] of char;
begin
  if gethostname(szHostName, 128) = 0 then
    begin
      HostEnt:= gethostbyname(szHostName);
      if HostEnt = nil then
        Result:= ''
      else
        begin
          SockAddrIn.sin_addr.S_addr:= longint(plongint(HostEnt^.h_addr_list^)^);
          Result:= inet_ntoa(SockAddrIn.sin_addr);
        end;
    end
  else
    { Error handle } ;
end;
1
 Аватар для O][o7n1k
8 / 8 / 1
Регистрация: 26.02.2009
Сообщений: 65
28.02.2009, 20:44
Предлагаю такой вариант
Вложения
Тип файла: txt localIP.txt (509 байт, 1924 просмотров)
0
 Аватар для DGK
3 / 3 / 0
Регистрация: 10.07.2009
Сообщений: 42
14.07.2009, 05:48
Есть есть еще нубее вары - кидай компонент TIdIPWatch из вкладки "Indy Misc", затем кинь компонент который будет отображать IP(к примеру кнопка "Button"). теперь пишешешь такой текст:
Delphi
1
2
3
4
procedure TForm1.Button1Click(Sender: TObject);
begin
Button1.Caption:=IdIPWatch1.LocalIP;
end;
Ой извеняюсь, давно это было...Только щас заметил.
1
2 / 2 / 0
Регистрация: 09.09.2009
Сообщений: 12
20.09.2009, 11:15
А можно узнать IP не заходя ни на какие сайты? Мне нужно определить ip, полученный в результате pppoe соединения.
0
Почетный модератор
 Аватар для Humanoid
11551 / 4346 / 452
Регистрация: 12.06.2008
Сообщений: 12,452
20.09.2009, 13:16
Romany4, я для этих целей когда-то давно нашёл такую функцию:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
uses
  Windows, Winsock;
 
.....
 
{ функция WSAIOCtl импортируется из Winsock 2.0 - Winsock 2 доступен }
{ только в Win98/ME/2K и 95 OSR2, NT srv pack #3 }
 
function WSAIoctl(s: TSocket; cmd: DWORD; lpInBuffer: PCHAR; dwInBufferLen:
  DWORD;
  lpOutBuffer: PCHAR; dwOutBufferLen: DWORD;
  lpdwOutBytesReturned: LPDWORD;
  lpOverLapped: POINTER;
  lpOverLappedRoutine: POINTER): Integer; stdcall; external 'WS2_32.DLL';
 
{ Константы взятые из заголовка C файлов }
 
const
  SIO_GET_INTERFACE_LIST = $4004747F;
  IFF_UP = $00000001;
  IFF_BROADCAST = $00000002;
  IFF_LOOPBACK = $00000004;
  IFF_POINTTOPOINT = $00000008;
  IFF_MULTICAST = $00000010;
 
type sockaddr_gen = packed record
  AddressIn: sockaddr_in;
  filler: packed array [0..7] of char;
end;
 
type INTERFACE_INFO = packed record
  iiFlags: u_long; // Флаги интерфейса
  iiAddress: sockaddr_gen; // Адрес интерфейса
  iiBroadcastAddress: sockaddr_gen; // Broadcast адрес
  iiNetmask: sockaddr_gen; // Маска подсети
end;
 
 
function GetPPPIP: In_addr;
var
  s: TSocket;
  wsaD: WSADATA;
  NumInterfaces: Integer;
  BytesReturned, SetFlags: u_long;
  PtrA: pointer;
  Buffer: array[0..20] of INTERFACE_INFO;
  i: Integer;
begin
  result.S_addr := 0; // Инициализируем переменную
 
  WSAStartup($0101, wsaD); // Запускаем WinSock
  // Здесь можно дабавить различные обработчики ошибки :)
 
  s := Socket(AF_INET, SOCK_STREAM, 0); // Открываем сокет
  if (s = INVALID_SOCKET) then
    exit;
 
  try // Вызываем WSAIoCtl
    PtrA := @bytesReturned;
    if (WSAIoCtl(s, SIO_GET_INTERFACE_LIST, nil, 0, @Buffer,
    1024, PtrA, nil, nil) <> SOCKET_ERROR) then
    begin // Если OK, то определяем количество существующих интерфейсов
 
      NumInterfaces := BytesReturned div SizeOf(INTERFACE_INFO);
 
      for i := 0 to NumInterfaces - 1 do // Для каждого интерфейса
      begin
        SetFlags := Buffer[i].iiFlags;
        if ((SetFlags and IFF_POINTTOPOINT) = IFF_POINTTOPOINT) and
           ((SetFlags and IFF_UP) = IFF_UP) then
        Begin
          Result := Buffer[i].iiAddress.addressIn.sin_addr;
          Break;
        End;
      end;
  end;
  except
  end;
  CloseSocket(s);
  WSACleanUp;
end;
Там просто получаешь результат функции GetPPPIP
1
2 / 2 / 0
Регистрация: 09.09.2009
Сообщений: 12
20.09.2009, 13:34
Humanoid, спасибо большое! То что нужно!
0
4 / 4 / 1
Регистрация: 17.01.2009
Сообщений: 59
21.09.2009, 22:35
Так намного проще ;

http://www.whatismyip.com/automation/n09230945.asp
Код:

Delphi
1
2
3
4
5
6
7
8
procedure TForm1.Button1Click(Sender: TObject);
 
var 
    ip : string;
begin
    ip := idHTTP1.Get('http://www.whatismyip.com/automation/n09230945.asp');
    Form1.Edit1.Text:= ip;
end;
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,892
22.09.2009, 00:41
Yakov, предложенный Вами метод полностью полагается на сервис whatismyip. А что если этот сервис прекратит свое существование? Или как-то измениться доменное имя и/или путь к скрипту - все, он не работает.
Тем временем, как метод Humanoid, более независим и основан непосредственно на функционале ОС.
1
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
22.09.2009, 08:39
2polivets:
Метод Humanoid в посте #11 еще хуже, потому что он неправильный.
Конечно он даст тебе IP-ник на твоем PPP-интерфейсе.
Но в зависимости от способа подключения это может быть совсем не тот IP-ник, с которым ты выходишь в Internet.
Если используется подключение через NAT-сервер, то вообще говоря узнать внешний IP-ник NAT-сервера с которым твой компьютер выходит в глобальный Internet нельзя - потому что этот IP-ник нигде не записан внутри твоей ОС.
Остается только обходной путь - зайти на www.whatismyip.com и узнать IP.
0
Почетный модератор
 Аватар для Humanoid
11551 / 4346 / 452
Регистрация: 12.06.2008
Сообщений: 12,452
22.09.2009, 09:13
odip, там я отвечал на вопрос про PPPoE соединение. Наверное, возможно, что бы PPPoE был ещё и совмещен с NATом... но лично я таких ситуаций никогда не встречал. Обычно, если используется PPP, то выдаётся внешний IP.
Использование whatismyip.com и т.п. мне не нравится по эстетическим причинам т.к. идёт обращение к серверу. Кроме того, я подозреваю что indy компонент будет занимать гораздо больше ресурсов, чем API функции... и если он больше в программе больше нигде не используется, то как-то не приятно его использовать для такой разовой цели
Но, конечно, в случае с NAT другого способа я не вижу, кроме как спросить свой IP у какого-нибудь сервера... но лично я считаю, что этим надо пользоваться только в крайнем случае.
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
22.09.2009, 09:53
VPN тоже делает PPP-соединение, как и PPPOE.
Я видел разные варианты - когда дают реальный IP, и когда дают внутренний IP.

На самом деле не понятно зачем вообще узнавать какой твой реальный IP за NAT.
0
4 / 4 / 1
Регистрация: 17.01.2009
Сообщений: 59
22.09.2009, 15:04
Как зачем ? Моей подруге или другу иногда нужна удаленная помощь , радмин или другая прога ждет меня , а что он скажет мне свой правильный IP не факт, поэтому проверяем IP и шлем на мыло pomochnik@delphi.ru А дальше дело техники
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
22.09.2009, 16:39
Если NAT делается у провайдера (то есть не на самом компе), то это ничего не даст.
Зайти на этот IP-ник все равно не получится.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.09.2009, 16:39
Помогаю со студенческими работами здесь

Как узнать имя компьютера (своего, чужого) из кода на VB?
Как узнать имя компьтера(своего,чужого) из кода на VB ??? Спасиба

Как узнать IP-адрес компьютера в локальной сети
Как программно узнать IP? То есть на форме есть кнопка и текстбокс, как сделать чтобы при нажатии на кнопку в на кнопку, в текстбоксе...

Как узнать ip-адрес роутера, который подключен ОТ компьютера?
Всех приветствую. Я сегодня сделал связку Компьютер-Роутер. Выключил DHCP-сервер на роутере, а LanIP не поменял.... интернет по wi-fi...

Как узнать ІР адрес компьютера, с которого заходят на страницу вконтакте ?
Доброго времени суток. Прошу меня извинить что пост не по теме. Но просьба давать только толковые ответы. Итак дело заключается в...

Как узнать внешний IP адрес компьютера если комп выходит ч.з. шлюз?
Добрый день! Подскажите как можно узнать внешний IP адрес своего компа, если комп находится в локальной сети и подключен к интернету...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru