100分求获取外网IP代码 不要在网上找一些没有用的代码,因为我已经在网上翻个遍都只能获得内网的IP。如果你的代码能给出代码获得外网IP马上结贴给分。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在公网搞一个服务器,提供最简单的ASP代码即可<%userip = Request.ServerVariables("HTTP_X_FORWARDED_FOR")if userip = "" Then userip = Request.ServerVariables("REMOTE_ADDR")Response.Write(userip)%>代码访问之~没其他办法了~再问N次都是这样的 这个是ASP代码啊。这个可以应用到delphi中吗 http://vod.lovemz.com/u/mzwb/archives/2007/21.html没试过 第一种方式:procedure TForm1.FormCreate(Sender: TObject); Var WSAData:TWSAData; begin if WSAStartup(MAKEWORD(2,0),WSAData)<>0 then showmessage('载入winsock dll失败'); end; procedure TForm1.FormDestroy(Sender: TObject); begin WSACleanUP; end; procedure TForm1.Button1Click(Sender: TObject); var Host: pHostent; str:String; begin Host := GetHostByName(PChar('www.baidu.com')); if Host=NIL then begin showmessage('网络出错'); exit; end; str:=Copy(Host.h_addr^,0,4); showmessage(Format('%d.%d.%d.%d', [ord(str[1]), ord(str[2]), ord(str[3]), ord(str[4])])); end; 第二种方式:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,winsock; const WM_zhenghai = WM_USER+100; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } procedure WMzhenghai(var message:Tmessage);Message WM_zhenghai; public { Public declarations } end; var Form1: TForm1; buf:HOSTENT; hAsyncTaskHandle:THandle; implementation {$R *.dfm} procedure Tform1.WMzhenghai(var message:Tmessage); begin if buf.h_addr=NIL then Begin showmessage('获取不到IP'); exit; end; showmessage(Format('%d.%d.%d.%d', [ord( buf.h_addr^[0]), ord(buf.h_addr^[1]), ord(buf.h_addr^[2]), ord(buf.h_addr^[3])])); end; procedure TForm1.FormCreate(Sender: TObject); Var WSAData:TWSAData; begin if (WSAStartup(MAKEWORD(2,0),WSAData)<>0) then raise Exception.Create('载入动态连接库winsock dll失败'); end; procedure TForm1.FormDestroy(Sender: TObject); begin WSACleanUP; end; procedure TForm1.Button1Click(Sender: TObject); begin hAsyncTaskHandle:=WSAAsyncGetHostByName(Handle,WM_zhenghai,pchar('www.baidu.com'),pchar(@buf),MAXGETHOSTSTRUCT); end; procedure TForm1.Button2Click(Sender: TObject); begin WSACancelAsyncRequest(hAsyncTaskHandle); end; end. to xixuemao 你的方法我早就试了N多次。。都是无法获取IP 呼叫: http://ip.lk52.com/ipfrom.asp取返回值 to xiezhenghai是的。。你在局域网里面试试。。就发现了 to sandal 你发的是ASP的。我要的是delphi代码呀 to aries_jo :摆渡这样跟我是属于内网还是外网 to xiezhenghai当然是外网了你用珊瑚QQ看到你的IP就是外网IP了 首先,你必须找到一个能够提供检测IP的网站。比如 http://www.ahjoe.com/count10/ip.asp <%userip = Request.ServerVariables("HTTP_X_FORWARDED_FOR")if userip = "" Then userip = Request.ServerVariables("REMOTE_ADDR")Response.Write(userip)% > // 下面是你要的delphi的,不过需要上面的配合。beginidhttp.get('web_page_addr');reuslt := idhttp.body;end; ///////////////function GetIP(const Url: string):string;/////begin idhttp.get(Url); reuslt := idhttp.body; end;///////////////yourip:=GetIP('http://www.bliao.com:2000/ip.phtml');////////这个绝对好用--,,只要是不访问外网,其他的都是扯淡 to Adayuer 你给的代码.我还要在电脑上装asp环境.这样根本不人性化to colorfoxsong 你这个代码是取带域名服务器的.都不和我的需求啊..难道我每个客户端都要做个域名.大家还有没有直接在代码里面获取的 试试这个procedure Tform1.Button5Click(Sender: TObject);////////这个绝对好用--,,只要是不访问外网,其他的都是扯淡//你加入一个idhttp控件beginshowmessage(idhttp1.get('http://www.bliao.com:2000/ip.phtml '));end; 其实,一个软件在内部转来转去,是不能看到外面的ip你要是有服务器,下面的也是,n:=socket.RemoteAddress;////这里是真实ip---socket:是客户来的cs to colorfoxsong 以下代码是服务器端,当客户端运行代码的时候以下代码可以获取客户端IP外网.procedure TSocketForm.AddClient(Thread: TServerClientThread);var Item: TListItem;begin Item := ConnectionList.Items.Add; Item.Caption :=' '+IntToStr(Thread.ClientSocket.LocalPort); Item.SubItems.Add('未登陆'); Item.SubItems.Add(Thread.ClientSocket.RemoteAddress);以下代码是在服务器端的TRemoteDataModule窗体里,但是,当用户登陆的时候.运行到RemoteAddress时候出错"灾难性故障"procedure TRDM_com.AddLoginUser(const loginpost,loginuser,loginaddress,loginhost,logindate: WideString);var i: integer; Thread: TServerSocket; s:string;begin Thread.Socket.RemoteAddress; 看来俺是白说了~没看懂偶的意思?只有在公网搞一个服务器,连接上去,然后让它告诉你外网IP,除此之外,全是扯谈, 这个就是答案没其他办法了~再问N次都是这样的!!!!ASP的Web服务器容易找到而已~ 必须是用asp代码才可以获得? 我看够垃圾的是楼主自己。ly_liuyang、xzhifei等很多DX都给出了原理。ahjoe、colorfoxsong等很多DX还给出了可行的代码。而楼主呢,连个HTTP都没弄明白也想搞网络? 紧急*delphi远程访问oracle存储过程错误 ado,sql,dbgrid构成表单的显示问题? Printer.Canvas对象是不是有宽度的限制的啊 Delphi 中的Boolean的返回值 问个简单的问题,欢迎接分 怎么样在DBGrid中代码添加记录啊? 關於mssql的存儲過程 流程实时控制的问题请教高手! 有用过新闻组的朋友请进来(请斑竹别删) 一个ADO的问题,送上38分! 思维加速X3产品是delphi搞的吗 ? 请问有做个考勤相关项目的朋友,哪一个牌子的考勤机比较好?
userip = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
if userip = "" Then userip = Request.ServerVariables("REMOTE_ADDR")
Response.Write(userip)
%>代码访问之~没其他办法了~再问N次都是这样的
没试过
procedure TForm1.FormCreate(Sender: TObject);
Var
WSAData:TWSAData;
begin
if WSAStartup(MAKEWORD(2,0),WSAData)<>0 then
showmessage('载入winsock dll失败');
end; procedure TForm1.FormDestroy(Sender: TObject);
begin
WSACleanUP;
end; procedure TForm1.Button1Click(Sender: TObject);
var
Host: pHostent;
str:String;
begin
Host := GetHostByName(PChar('www.baidu.com')); if Host=NIL then
begin
showmessage('网络出错');
exit;
end;
str:=Copy(Host.h_addr^,0,4);
showmessage(Format('%d.%d.%d.%d',
[ord(str[1]),
ord(str[2]),
ord(str[3]),
ord(str[4])])); end;
第二种方式:
unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,winsock;
const
WM_zhenghai = WM_USER+100;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
procedure WMzhenghai(var message:Tmessage);Message WM_zhenghai;
public
{ Public declarations }
end; var
Form1: TForm1;
buf:HOSTENT;
hAsyncTaskHandle:THandle;
implementation {$R *.dfm} procedure Tform1.WMzhenghai(var message:Tmessage);
begin
if buf.h_addr=NIL then
Begin
showmessage('获取不到IP');
exit;
end;
showmessage(Format('%d.%d.%d.%d',
[ord( buf.h_addr^[0]),
ord(buf.h_addr^[1]),
ord(buf.h_addr^[2]),
ord(buf.h_addr^[3])]));
end; procedure TForm1.FormCreate(Sender: TObject);
Var
WSAData:TWSAData;
begin
if (WSAStartup(MAKEWORD(2,0),WSAData)<>0) then
raise Exception.Create('载入动态连接库winsock dll失败');
end; procedure TForm1.FormDestroy(Sender: TObject);
begin
WSACleanUP;
end; procedure TForm1.Button1Click(Sender: TObject);
begin
hAsyncTaskHandle:=WSAAsyncGetHostByName(Handle,WM_zhenghai,pchar('www.baidu.com'),pchar(@buf),MAXGETHOSTSTRUCT);
end; procedure TForm1.Button2Click(Sender: TObject);
begin
WSACancelAsyncRequest(hAsyncTaskHandle);
end; end.
你的方法我早就试了N多次。。都是无法获取IP
取返回值
to sandal 你发的是ASP的。我要的是delphi代码呀
当然是外网了你用珊瑚QQ看到你的IP就是外网IP了
比如 http://www.ahjoe.com/count10/ip.asp
userip = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
if userip = "" Then userip = Request.ServerVariables("REMOTE_ADDR")
Response.Write(userip)
% >
// 下面是你要的delphi的,不过需要上面的配合。begin
idhttp.get('web_page_addr');
reuslt := idhttp.body;
end;
///////////////
function GetIP(const Url: string):string;
/////
begin
idhttp.get(Url);
reuslt := idhttp.body;
end;///////////////yourip:=GetIP('http://www.bliao.com:2000/ip.phtml');
////////这个绝对好用--,,只要是不访问外网,其他的都是扯淡
to colorfoxsong 你这个代码是取带域名服务器的.都不和我的需求啊..难道我每个客户端都要做个域名.大家还有没有直接在代码里面获取的
试试这个
procedure Tform1.Button5Click(Sender: TObject);
////////这个绝对好用--,,只要是不访问外网,其他的都是扯淡
//你加入一个idhttp控件
begin
showmessage(idhttp1.get('http://www.bliao.com:2000/ip.phtml '));
end;
你要是有服务器,下面的也是,
n:=socket.RemoteAddress;////这里是真实ip---socket:是客户来的cs
以下代码是服务器端,当客户端运行代码的时候以下代码可以获取客户端IP外网.
procedure TSocketForm.AddClient(Thread: TServerClientThread);
var
Item: TListItem;begin
Item := ConnectionList.Items.Add;
Item.Caption :=' '+IntToStr(Thread.ClientSocket.LocalPort);
Item.SubItems.Add('未登陆');
Item.SubItems.Add(Thread.ClientSocket.RemoteAddress);以下代码是在服务器端的TRemoteDataModule窗体里,但是,当用户登陆的时候.运行到RemoteAddress时候出错"灾难性故障"procedure TRDM_com.AddLoginUser(const loginpost,loginuser,loginaddress,loginhost,logindate: WideString);
var
i: integer;
Thread: TServerSocket;
s:string;
begin
Thread.Socket.RemoteAddress;