delphi 获取本地IP地址的几种方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi 获取本地IP地址的几种方法相关的知识,希望对你有一定的参考价值。
1、通过注册表获取或修改Ip想到Windows会把系统网卡相关信息存入注册表,肯定可通过注册表读取具体ip信息。大致思路是找HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkCards ,由NetworkCards得分支表示各个网卡的信息通过ServiceName到 HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces 下找到对应的网卡配置详细信息,通过对注册表的read与write实现读取或修改ip地址等信息。
2、通过解析批处理命令结果获取
在cmd命令行输入ipconfig可以显示出当前电脑ip地址,可以考虑先执执行命令"Ipconfig /all >Ips.txt",然后解析Ips.txt文件得到本机的Ip信息,此方法较繁杂。
3、通过delphi控件获取Ip
找到fastnet 下的 Tpowersock控件,利用 该控件localip属性返回 本机(主要指局域网) ip地址 。 放一个控件在窗体上可得到本机IP,方便简单。
4、通过WinSock函数获取Ip
此方法在程序中常用,一般函数如下:
//多网卡 将IP地址写入到列表,求本机IP的话返回IP列表中的第一个即可,该函数要引用 WinSock
function GetLocalIpList(var IpList:TStringList):Integer;
type
TaPInAddr = array[0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
HostName: array [0..MAX_PATH] of char;
NameLen: Integer;
WSData: TWSAData;
lpHostEnt: PHostEnt;
I: Integer;
pptr: PaPInAddr;
begin
Result := 0;
if WSAStartup(MakeWord(2,0), WSData) <> 0 then Exit;
try
NameLen := sizeof(HostName);
fillchar(HostName, NameLen, 0);
NameLen := GetHostName(HostName, NameLen);
if NameLen = SOCKET_ERROR then Exit;
lpHostEnt := GetHostByName(HostName);
if lpHostEnt = Nil then Exit;
I := 0;
pPtr := PaPInAddr(lpHostEnt^.h_addr_list);
IpList.Clear;
while pPtr^[I] <> nil do
begin
IpList.ADD( inet_ntoa(pptr^[I]^));
Inc(I);
end;
Result := IpList.Count;
finally
WSACleanup;
end;
end; 参考技术A 用这个function LocalIP : string;
type
TaPInAddr = array [0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
phe : PHostEnt;
pptr : PaPInAddr;
Buffer : array [0..63] of char;
I : Integer;
GInitData : TWSADATA;
begin
WSAStartup($101, GInitData);
Result := ' ';
GetHostName(Buffer, SizeOf(Buffer));
phe :=GetHostByName(buffer);
if phe = nil then Exit;
pptr := PaPInAddr(Phe^.h_addr_list);
I := 0;
while pptr^[I] <> nil do begin
if i=0
then result:=StrPas(inet_ntoa(pptr^[I]^))
else result:=result+ ', '+StrPas(inet_ntoa(pptr^[I]^));
Inc(I);
end;
WSACleanup;
end; 参考技术B function LocalIP : string;
type
TaPInAddr = array [0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
phe : PHostEnt;
pptr : PaPInAddr;
Buffer : array [0..63] of char;
I : Integer;
GInitData : TWSADATA;
begin
WSAStartup($101, GInitData);
Result := ' ';
GetHostName(Buffer, SizeOf(Buffer));
phe :=GetHostByName(buffer);
if phe = nil then Exit;
pptr := PaPInAddr(Phe^.h_addr_list);
I := 0;
while pptr^[I] <> nil do begin
if i=0
then result:=StrPas(inet_ntoa(pptr^[I]^))
else result:=result+ ', '+StrPas(inet_ntoa(pptr^[I]^));
Inc(I);
end;
WSACleanup;
end;
liunx下获取网卡地址的几种方法
CentOS Linux release 7.2.1511 (Core)系统获取网卡ip
ifconfig em1|awk ‘NR==2 {print $2}‘
ifconfig em1|sed -n ‘2p‘|cut -d ‘ ‘ -f 10
ifconfig em1|sed -n "s/^.*inet \(.*\) netmask.*$/\1/gp"
grep ‘IPADDR‘ /etc/sysconfig/network-scripts/ifcfg-em1|awk -F ‘=‘ ‘{print $NF}‘
grep ‘IPADDR‘ /etc/sysconfig/network-scripts/ifcfg-em1|awk -F ‘=‘ ‘{print $2}‘
以上是关于delphi 获取本地IP地址的几种方法的主要内容,如果未能解决你的问题,请参考以下文章