如果得到本机的公网IP地址 ( 积分: 100 )

  • 主题发起人 主题发起人 雪夜寒冰
  • 开始时间 开始时间

雪夜寒冰

Unregistered / Unconfirmed
GUEST, unregistred user!
我看了坛子里一些代码,可是没有一个可以在我这里通过的,希望哪位给出可以通过的代码!
 
我看了坛子里一些代码,可是没有一个可以在我这里通过的,希望哪位给出可以通过的代码!
 
这个我只能通过一个变通的方式得到 ,别的方法还真不知道

你的自己写一个asp的代码 传到一个网站上面
通过
serverip:=IdHTTP1.Get('http://www.sy114114.com/data/zln.txt');
这种方式得到
 
发送本机ip IdHTTP1.Get('http://www.sy114114.com/zlnip.asp');
得到 本机 ip serverip:=IdHTTP1.Get('http://www.sy114114.com/data/zln.txt');

asp的内容
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
</head>


<%
cip=Request.ServerVariables("REMOTE_ADDR")
%>
<body>
cip=<%=cip%>
<%
Dim fso, f1, ts, s,strsql

Const ForReading = 1
Set fso = CreateObject("Scripting.FileSystemObject")
Set f1 = fso.CreateTextFile(server.mappath("data/zln.txt"), True)
' 写一行。server.mappath("data/bfxx.mdb"
'Response.Write "Writing file <br>"

f1.WriteLine cip

f1.WriteBlankLines(1)
f1.Close
' 读取文件的内容。
'Response.Write "Reading file <br>"
Set ts = fso.OpenTextFile(server.mappath("data/zln.txt"), ForReading)
s = ts.ReadLine
'Response.Write "File contents = '" & s & "'"
ts.Close

%>

</body>
</html>
 
暂时可能只有980的方法能达到要求,虽然有很多不满。
 
我找了很多 ,也是没有结果 才使用这样的方法 ,如果有更好的方法 ,还请大家给出个结果,
 
你要搞清楚,局域网的机器访问外网的时候;
它的公网IP是怎么经过交换机或者路由器变换产生的?
知道这个原理,就不难编程实现,可惜我不知道...
 
我已经找到方法了,谢谢各位!
 
什么方法 可以告之吗
 
在uses中一定要加winsock
function getLocalIP:string; //获取本地机器IP地址
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:=StrPas(inet_ntoa(pptr^^));
Inc(I);
end;
WSACleanup;
end;
 
还以为是什么好办法呢,
你的程序在我机器上取得的只是192.168.1.8,也就是只能取内网IP
当不是通过路由等间接方式上网时,你的办法是可行的,但……就不行了。
 
不会吧,我在通路由等上网时是不可以的,只能得到192.168.xxx.xxx,但在有外网IP时是可以用的
 
测试过,还真的不行,我的是192.168.1.14。
自动获得IP,通过路由上网;
 
路由上网是不行的,因为你没有公网的IP地址,只有路由有公网IP
 
后退
顶部