Форум: "Сети";
Текущий архив: 2003.04.07;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.009 c