局域网内上网的机,如何取得自己在Internet上的IP的地址?(100分)

  • 主题发起人 主题发起人 Lee.JH
  • 开始时间 开始时间
没有,所以取不到
 
用这个,一眼看到
http://ip.loveroot.com/
 
用delphi代码如何实现?
 
faint,我说怎么这么简单的问题都有人问!见笑了!
 
看一下QQ去掉广告。显示IP的那段代码。你就搞定了
 
即使你用上面那位建议用IP探索者取到了你再INTERNET上的IP地址,那也没有什么用,因为通过局域网上INTERNET网,往往是通过某一台主机出去的,该台主机给你的IP地址是固定的,无论你在什么时候上网,同时其他通过该主机出去的计算机的IP地址也与你的IP地址一样.如果你想通过编程的方法取得你的IP地址,可以这样:通过你的计算机发一邮件到你的邮箱,再将邮件从你的信箱读出,取得邮件的信息头,从信息头可以知道你的动态IP地址,如果你是通过局域网出去的话,只能得到与IP探索者相同的结果,编程可能涉及到NMSMTP和NMPOP控件,可以参考相关的资料.
 
MicRoven
,又是搞传销的。。
http://www.cashfiesta.com/php/join.php?ref=MicRoven
后面的不就是你的名字吗?
COW,一点我就成了你的线人了。。你以为。。没人知呀。。。
 
//获得IP
function Tfrmmain.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^ <> nil do
begin
Result := inet_ntoa(pptr^^);
Inc(I);
end;
WSACleanup;
end;
 
同意思楼上的,我调试通过
 
这只能得到本地LAN内的IP,人家是要WAN上的IP啦~~~
 
上公网你只能得到路由在公网上的IP,如果你控制不了路由,做不了端口映射,得到了又有什么用呢?
 
比如我做个INDY SERVER,我想知道外地通过代理连接上的CLIENT的IP和他在局域内连上SERVER的PORT
 
各位各位!
我想各位没有理解清楚我的意思!
我是指局域网上的交换机IP地址。
得到internet网交换机用dos下的命令都可以做到了这谁不懂
得到了又没用。
我这里指的是局域网的交换机IP地址,
知道该IP地址后可以通过web接口来管理交换机参数,
谁说这没有意义?


to:lightboy
简单的问题?也没见你给个满意的答案

to:guan8080
没有这个必要我这个问题是获得LAN交换机的IP地址来管理它,
与internet无关。
并且你的方法用一个简单的winipcfg即可实现
 
to dazzling
你误会我的意思了,用delphi实现这个问题,我从没说过简单,否则我怎么会说"见笑了"?
 
就是主机的公网IP!
 
说废话的这么多
这问题我前些时候刚解决,解决他起码花了我好多天时间
现给你完整代码
希望马上给我加100分,我是冲着你这100分来的

-----Unit1.pas------
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Psock, NMHttp, ExtCtrls;

type
TForm1 = class(TForm)
ComboBox1: TComboBox;
Memo1: TMemo;
Button1: TButton;
NMHTTP1: TNMHTTP;
Timer1: TTimer;
Button2: TButton;
Memo2: TMemo;
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
{==================================================================}
procedure TForm1.Button1Click(Sender: TObject);//get网页取源代码
var
i: Integer;
s,s1: string;
begin
try
//----------------------
s:= combobox1.Text;
i:=combobox1.Items.IndexOf(s);
s1:=combobox1.Items.Strings[i+1];
combobox1.Text:=s1;
//----------------------
timer1.Enabled:=false;
NMHTTP1.Get(combobox1.Text);
Memo1.Text := NMHTTP1.Body;
timer1.Enabled:=true;
button2.Click;//过滤取IP
form1.Caption:='myip>>>>'+memo2.Text;
except
form1.Caption:='有问题注意';
timer1.Enabled:=true;
end;
end;
{==================================================================}
procedure TForm1.Timer1Timer(Sender: TObject);
begin
timer1.Interval:=1000*10;
button1.Click; //get网页取源代码
end;
{==================================================================}
function GetIP(src:string):string; //过滤出IP 函数
var i,ipindex:integer;
ip:array [1..4] of string;
begin
result:='';
i:=1;
while i<Length(src) do begin
while (src<='0')or(src>='9') do i:=i+1;
ipindex:=1;
while ipindex<=4 do begin
ip[ipindex]:='';
while (src>='0')and(src<='9') do begin
ip[ipindex]:=ip[ipindex]+src;
i:=i+1;
end;
if (ip[ipindex]='')or(StrToInt(ip[ipindex])>255)or( (ipindex<4)and(src<>'.')) then break
else i:=i+1;
Inc(ipindex);
end;
if ipindex>4 then begin
result:=ip[1]+'.'+ip[2]+'.'+ip[3]+'.'+ip[4];
break;
end;
end;
end;
{==================================================================}
procedure TForm1.Button2Click(Sender: TObject); //过滤出IP
begin
memo2.Text:=GetIp(Memo1.Text);
end;

end.


-------Unit1.dfm-------------
object Form1: TForm1
Left = 253
Top = 129
Width = 431
Height = 330
Caption = 'nmhttp'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object ComboBox1: TComboBox
Left = 16
Top = 24
Width = 382
Height = 21
ItemHeight = 13
TabOrder = 0
Text = 'http://www.lk52.com/ip/IPFrom.asp'
Items.Strings = (
'http://ip.loveroot.com/index.php'
'http://www.rich8.com/ip.php'
'http://www.lk52.com/ip/IPFrom.asp')
end
object Memo1: TMemo
Left = 8
Top = 80
Width = 375
Height = 113
TabOrder = 1
end
object Button1: TButton
Left = 72
Top = 48
Width = 98
Height = 25
Caption = 'get'#32593#39029#21462#28304#20195#30721
TabOrder = 2
OnClick = Button1Click
end
object Button2: TButton
Left = 8
Top = 200
Width = 75
Height = 25
Caption = #36807#28388#20986'IP'
TabOrder = 3
OnClick = Button2Click
end
object Memo2: TMemo
Left = 104
Top = 248
Width = 153
Height = 38
TabOrder = 4
end
object NMHTTP1: TNMHTTP
Port = 0
ReportLevel = 0
Body = 'Default.htm'
Header = 'Head.txt'
InputFileMode = False
OutputFileMode = False
ProxyPort = 0
Left = 12
Top = 232
end
object Timer1: TTimer
OnTimer = Timer1Timer
Left = 336
Top = 56
end
end
 
这样解决不是什么好办法吗?大哥!
 
应该没有办法,除非通过 http://ip.loveroot.com/ 一类网页反馈.
客户机[内网卡A]==>代理[内网卡B+外网卡C]==>远程机[外网卡D]
你(A)实际上不直接和外网卡C连接,应该无法直接得到.

 
都不用这样麻烦
只需要放置一个TClientSocket名为cs

cs.port:=25
cs.Host:='smtp.163.com'
cs.open;

cs.localAddr就是本机地址
 
后退
顶部