delphi 如何判断自己的宽带是内网还是外网?

发布时间:2024-05-09 06:41 发布:上海旅游网

问题描述:

如题
我的意思就是说如何用delphi判断自己是否使用路由器上网,能给给代码吗?

问题解答:

通过和 外网或内网电脑的子网掩码和IP地址可以判断是内网还是外网

获得子网掩码:
unit UnitMask;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,registry,
StdCtrls;

type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
reg:TRegistry;
re:boolean;
device:string;
buf:pchar;
mask:string;
adapter:string;
begin
reg:=TRegistry.Create();
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
//open key
//win NT
//get bind device
re:=Reg.OpenKey('SYSTEM\CurrentControlSet\Services\Tcpip\Linkage',
false);

if re then
begin
getmem(buf,1024);
Reg.ReadBinaryData('Bind',buf^,1024);
device := strpas(buf);
freemem(buf);
end
else
begin
edit1.text:='Failed to get bind device';
reg.closekey();
reg.Free;
exit;
end;
reg.CloseKey;
//get adapter
adapter:=copy(device,2,length(device)-1);
showmessage(adapter);
adapter:=copy(adapter,POS('\',adapter)+1,length(adapter)-POS('\',adapter));
showmessage(adapter);
//query
re:=Reg.OpenKey('SYSTEM\CurrentControlSet\Services\'+
adapter+
'\Parameters\Tcpip',
false);
if re then
begin
getmem(buf,1024);
Reg.ReadBinaryData('SubnetMask',buf^,1024);
mask := strpas(buf);
freemem(buf);
end

else
mask:='Failed to get subnet mask';
finally
Reg.CloseKey;
Reg.Free;
end;
edit1.text:=device;
edit2.text:=mask;
end;
end.

——————————————————————————————————————————————————————————————————————

获得IP地址:
uses
Winsock;

{...}

function getIPs: Tstrings;
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 := TstringList.Create;
Result.Clear;
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
Result.Add(inet_ntoa(pptr^[I]^));
Inc(I);
end;
WSACleanup;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines := GetIps;
end;

不知道你想问的是什么

是不是想知道自己是通过局域网连接网络
还是直接连接网络?

如果你是宽带 不用拨号的话 基本都是局域网连接主机访问网络

如果你是拨号 基本直接连接外网

不过这个知道没有实际意义吧

很久以前,刚出BT的时候,我知道个方法,现在忘记了,不过现在一般的宽带,用ADSL上网的都是外网,不过是动态IP,每次都换,用这种IP和外地的朋友连机打游戏都成。其它的像住宅小区、网吧、学校、单位、公司等光纤,都是内网,不过也有用外网的,很少,大都设在网络技术部门。

热点新闻