Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.07;
Скачать: CL | DM;

Вниз

IP адресс   Найти похожие ветки 

 
TButton ©   (2003-02-11 19:44) [0]

Уважаемые мастаки, подскажите плз как мне узнать IP адресс своего компутера? i.e. как делают в играх для TCP/IP.


 
Provodnick   (2003-02-12 09:32) [1]

Вот ответ из FAQ сего сайта:

Как узнать IP адрес. (06.01.01)

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\NetTrans\ (для 98-винды)
Ищем параметр IPAddress
Программно можно определить следующим образом:


var WSAData : TWSAData;
p : PHostEnt;
Name : array [0..$FF] of Char;
begin
WSAStartup($0101, WSAData);
GetHostName(name, $FF);
p := GetHostByName(Name);
showmessage(inet_ntoa(PInAddr(p.h_addr_list^)^));
WSACleanup;
end;

С уважением, Оксана (oksana@wtgres.pssr.ru)

-= Из конференции сайта MASTERS OF DELPHI ( http://delphi.mastak.com) =-

От себя могу предложить, например, поместить на форму TNMMsg и использовать свойство LocalIP


 
TButton ©   (2003-02-12 18:07) [2]

мерси


 
Malder ©   (2003-02-12 20:53) [3]

Так узнаешь только один из адресов интерфейса (если их несколько)


 
Anatoly Podgoretsky ©   (2003-02-12 21:18) [4]

А если один нужет, то не стоит и стараться, есть гарантированный адрес 127.0.0.1


 
TankMan ©   (2003-02-13 00:20) [5]

:) Да уж самый что нинаесть гарантированный... а вот только вопрос в другом поднимается, вот например у меня есть сеть, и я вышел в инет, каким образом можно узнать, какой из 2х апишников локальный, а какой инетовский?


 
TButton ©   (2003-02-13 02:26) [6]

вобщем то я хотел узнать ИП в текущем соединении. наскока я понял в ИНет соединении ИП один, в сервере удаленного доступа другой, а если есть еще и ЛАН то вообще третий.


 
Malder ©   (2003-02-13 17:51) [7]

TankMan, нету айпишников инетовских и локальных. Есть IP диапазоны, которые выделены для локальных сетей. Если тебе это нужно, так просто проверь, входит ли данный IP в нужные диапазоны


 
TButton ©   (2003-02-13 18:03) [8]

2Malder ©
хе-хе. а я не знаю этих диапазонов.


 
Anatoly Podgoretsky ©   (2003-02-13 18:07) [9]

TankMan © (13.02.03 00:20)
Опять узко смотришь, их может быть много и они могут динамически добавляться и удаляться.
А через какой из них ты по падаешь во внешнюю сеть определяется таблицей маршрутизации. Можно даже предположить доступ в Сеть через разные ИП в том числе и однвременно.


 
TButton ©   (2003-02-13 19:06) [10]

нашел! TCustomWinSocket.LocalAddress


 
Anatoly Podgoretsky ©   (2003-02-13 19:32) [11]

Это всего лишь один из адресов, возможно тот который тебе нужен.


 
TButton ©   (2003-02-14 05:29) [12]

ага. тока он не доступен пока не сконнектишься и у сервер сокета почему-то равен 0.0.0.0


 
Malder ©   (2003-02-14 18:16) [13]

ну так правильно. Ты прочитай то, что написано выше и осмысли.

До момента коннекта сокет не знает куда его выведет маршрутизация =), то есть через какой интерфейс будет осуществлятся соединение, поэтому и нет такого понятия, как LocalAddress

На а так как сервер сокет вообще никуда "не выходит" и слушает соединения от всех интерфейсов, у него вообще нет такого понятия как LocalAddress


 
TankMan ©   (2003-02-15 00:21) [14]

Так и всетаки? есть 2 IP - один IP определяет мой комп в локальной сети, другой используется как Ip моего компа в инете, т.е. их как минимум 2(!) А как узнать, какой из них какой? (всмысле локальный инетовский) или я что-то не так понял?


 
Malder ©   (2003-02-15 01:24) [15]

TankMan, ну чтож. Давай повторим, что написано выше:

> нету айпишников инетовских и локальных


> Опять узко смотришь, их может быть много и они могут динамически добавляться и удаляться.
А через какой из них ты по падаешь во внешнюю сеть определяется таблицей маршрутизации. Можно даже предположить доступ в Сеть через разные ИП в том числе и однвременно



Неужели так сложно почитать ?


 
Случайный прохожий   (2003-02-15 02:35) [16]

Недавно меня тоже интересовало нечто подобное и, как я думаю, - это и есть решение этой проблемы:

unit Etwas;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, WinSock, Psock, NMFtp, WinInet;

type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
private
{ Private declarations }
public
{ Public declarations }
end;

const
MAX_ADAPTER_DESCRIPTION_LENGTH = 128;
MAX_ADAPTER_NAME_LENGTH = 256; MAX_ADAPTER_ADDRESS_LENGTH = 8;
type
PIP_ADDRESS_STRING = ^IP_ADDRESS_STRING;
IP_ADDRESS_STRING =
packed record
acString : array [1..16] of Char;
end;

PIP_MASK_STRING = ^PIP_MASK_STRING;
IP_MASK_STRING = IP_ADDRESS_STRING;

PIP_ADDR_STRING = ^IP_ADDR_STRING;
IP_ADDR_STRING =
packed record
Next : PIP_ADDR_STRING;
IpAddress : IP_ADDRESS_STRING;
IpMask : IP_MASK_STRING;
Context : DWORD;
end;

time_t = int64;

PIP_ADAPTER_INFO = ^IP_ADAPTER_INFO;
IP_ADAPTER_INFO = packed record
Next : PIP_ADAPTER_INFO;
ComboIndex : DWORD;
AdapterName : array [1..MAX_ADAPTER_NAME_LENGTH+4] of Char ;
Description : array [1..MAX_ADAPTER_DESCRIPTION_LENGTH+4] of Char;
AddressLength : UINT;
Address : array [1..MAX_ADAPTER_ADDRESS_LENGTH] of Byte;
Index : DWORD;
dwType : UINT;
DhcpEnabled : UINT;
CurrentIpAddress : PIP_ADDR_STRING;
IpAddressList : IP_ADDR_STRING;
GatewayList : IP_ADDR_STRING;
DhcpServer : IP_ADDR_STRING;
HaveWins : Boolean;
PrimaryWinsServer : IP_ADDR_STRING;
SecondaryWinsServer : IP_ADDR_STRING;
LeaseObtained : time_t;
LeaseExpires : time_t;
end;

function GetAdaptersInfo(const pAdapterInfo : PIP_ADAPTER_INFO;const pOutBufLen : PULONG) : DWORD; stdcall; external "IPHLPAPI.DLL" name "GetAdaptersInfo";
//-------------------------------------------------------------------------
var
Form1: TForm1;
implementation
{$R *.dfm}

function GetIpGateway:string;
var
dwResult : DWORD;
dwLen : DWORD;
pAdapterWork : PIP_ADAPTER_INFO;
pAdapterList : PIP_ADAPTER_INFO;
iasWork : IP_ADDR_STRING;
AddresseStr,AdaptName : string;
begin
pAdapterList := nil;
dwLen := 0;
dwResult := GetAdaptersInfo(pAdapterList,@dwLen);
if dwResult = ERROR_BUFFER_OVERFLOW then
begin
pAdapterList := AllocMem(dwLen);
try
dwResult := GetAdaptersInfo(pAdapterList,@dwLen);
if dwResult = ERROR_SUCCESS then
begin
pAdapterWork := pAdapterList;
repeat
iasWork := pAdapterWork.GatewayList;
while iasWork.Next <> nil do
begin
AddresseStr := trim(iasWork.IpAddress.acString);
iasWork := iasWork.Next^;
end;
AddresseStr := trim(iasWork.IpAddress.acString);
if AddresseStr <> "" then Result := AddresseStr;
pAdapterWork := pAdapterWork.Next;
until pAdapterWork = nil;
end;
finally
FreeMem(pAdapterList,dwLen);
end;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var IPAdr:String;
begin
IPAdr := GetIPGateway;
Memo1.Clear;
Memo1.Lines.Add(IPAdr);
end;

end.


 
Случайный прохожий   (2003-02-15 02:51) [17]

Здесь ссылки по этой теме:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iphlp/iphlp/getadaptersinfo.asp

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iphlp/iphlp/ip_adapter_info.asp


 
Случайный прохожий   (2003-02-15 03:51) [18]

Да, вот ещё. Эта часть кода здесь не нужна:
while iasWork.Next <> nil do
begin
AddresseStr := trim(iasWork.IpAddress.acString);
iasWork := iasWork.Next^;
end;


 
Provodnick   (2003-02-15 09:52) [19]

...и все отправились разбирать исходник. Конец.



Страницы: 1 вся ветка

Текущий архив: 2003.04.07;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.013 c
3-19494
V-A-V
2003-03-19 09:03
2003.04.07
Глюк в клиентской DataSet или я, что не понимаю


14-19777
panov
2003-03-17 02:10
2003.04.07
уф... заканчивается подготовка к отъезду...


14-19755
Rollch
2003-03-21 23:10
2003.04.07
Как убрать корзину с рабочего стола (XP)


1-19521
Temych
2003-03-26 04:21
2003.04.07
Как файл txt , зашитый в exe можно редактировать?


1-19531
dima78
2003-03-26 12:19
2003.04.07
Неиспользуемые модули