Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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.008 c
3-19424
yurikon03
2003-03-16 13:24
2003.04.07
Добавление записи в дочерней таблице


1-19530
Вадим
2003-03-26 16:15
2003.04.07
TRcihEdit


6-19722
msoftware
2003-01-29 10:08
2003.04.07
Как вызвать окно соеденения с Интернетом?


14-19820
melavcorp
2003-03-20 11:34
2003.04.07
Подскажите где взять компонент типа..TDBJpegImage ...


14-19839
LazorenkoX
2003-03-21 00:35
2003.04.07
Галерея





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский