问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

在ASP网页中,如何显示浏览者的ip及地理位置?

发布网友 发布时间:2022-04-23 23:58

我来回答

4个回答

热心网友 时间:2022-05-03 06:01

首先,是前人写的ASP查询纯真IP的类,请保存为cz.asp
需要一个ip数据库,把cz.asp,serach.asp和cz.dat数据库放在一起。

<%
Class TQQWry
Dim Country,LocalStr,Buf,OffSet
Private StartIP,EndIP,CountryFlag
Public FirstStartIP,LastStartIP,RecordCount,QQWryFile
Private Stream,EndIPOff

Private Sub Class_Initialize
Country=""
LocalStr=""
StartIP=0
EndIP=0
CountryFlag=0
FirstStartIP=0
LastStartIP=0
EndIPOff=0
QQWryFile=Server.MapPath("cz.dat")
End Sub

Public Sub SetPath(p)
QQWryFile = Server.MapPath(p)
End Sub

Function IP2Int(IP)
Dim IPArray,i
IPArray=Split(IP,".",-1)
FOr i=0 to 3
If Not IsNumeric(IPArray(i)) Then IPArray(i)=0
If CInt(IPArray(i))<0 Then IPArray(i)=Abs(CInt(IPArray(i)))
If CInt(IPArray(i))>255 Then IPArray(i)=255
Next
IP2Int=(CInt(IPArray(0))*256*256*256)+(CInt(IPArray(1))*256*256)+(CInt(IPArray(2))*256)+CInt(IPArray(3))'-1
End Function

Function Int2IP(IntValue)
p4=IntValue-Fix(IntValue/256)*256
IntValue=(IntValue-p4)/256
p3=IntValue-Fix(IntValue/256)*256
IntValue=(IntValue-p3)/256
p2=IntValue-Fix(IntValue/256)*256
IntValue=(IntValue-p2)/256
p1=IntValue
Int2IP=Cstr(p1)&"."&Cstr(p2)&"."&Cstr(p3)&"."&Cstr(p4)
End Function

Private Function GetStartIP(RecNo)
OffSet=FirstStartIP+RecNo * 7
Stream.Position=OffSet
Buf=Stream.Read(7)

EndIPOff=AscB(MidB(Buf,5,1))+(AscB(MidB(Buf,6,1))*256)+(AscB(MidB(Buf,7,1))*256*256)
StartIP=AscB(MidB(Buf,1,1))+(AscB(MidB(Buf,2,1))*256)+(AscB(MidB(Buf,3,1))*256*256)+(AscB(MidB(Buf,4,1))*256*256*256)
GetStartIP=StartIP
End Function

Private Function GetEndIP()
Stream.Position=EndIPOff
Buf=Stream.Read(5)
EndIP=AscB(MidB(Buf,1,1))+(AscB(MidB(Buf,2,1))*256)+(AscB(MidB(Buf,3,1))*256*256)+(AscB(MidB(Buf,4,1))*256*256*256)
CountryFlag=AscB(MidB(Buf,5,1))
GetEndIP=EndIP
End Function

Private Sub GetCountry(IP)
If (CountryFlag=1 Or CountryFlag=2) Then
Country=GetFlagStr(EndIPOff+4)
If CountryFlag=1 Then
LocalStr=GetFlagStr(Stream.Position)
If IP>= IP2Int("255.255.255.0") And IP<=IP2Int("255.255.255.255") Then
LocalStr=GetFlagStr(EndIPOff+21)
Country=GetFlagStr(EndIPOff+12)
End If
Else
LocalStr=GetFlagStr(EndIPOff+8)
End If
Else
Country=GetFlagStr(EndIPOff+4)
LocalStr=GetFlagStr(Stream.Position)
End If
Country=Trim(Country)
LocalStr=Trim(LocalStr)
If InStr(Country,"CZ88.net") Then Country = "IALVIN.CN"
If InStr(LocalStr,"CZ88.net") Then LocalStr = "IALVIN.CN"
End Sub

Private Function GetFlagStr(OffSet)
Dim Flag
Flag=0
Do While (True)
Stream.Position=OffSet
Flag=AscB(Stream.Read(1))
If(Flag=1 Or Flag=2 ) Then
Buf=Stream.Read(3)
If (Flag=2 ) Then
CountryFlag=2
EndIPOff=OffSet-4
End If
OffSet=AscB(MidB(Buf,1,1))+(AscB(MidB(Buf,2,1))*256)+(AscB(MidB(Buf,3,1))*256*256)
Else
Exit Do
End If
Loop

If (OffSet<12 ) Then
GetFlagStr=""
Else
Stream.Position=OffSet
GetFlagStr=GetStr()
End If
End Function

Private Function GetStr()
Dim c
GetStr=""
Do While (True)
c=AscB(Stream.Read(1))
If (c=0) Then Exit Do

If c>127 Then
If Stream.EOS Then Exit Do
GetStr=GetStr&Chr(AscW(ChrB(AscB(Stream.Read(1)))&ChrB(C)))
Else
GetStr=GetStr&Chr(c)
End If
Loop
End Function

Public Function QQWry(DotIP)
Dim IP,nRet
Dim RangB,RangE,RecNo
IP=IP2Int(DotIP)
Set Stream=CreateObject("ADodb.Stream")
Stream.Mode=3
Stream.Type=1
Stream.Open
Stream.LoadFromFile QQWryFile
Stream.Position=0
Buf=Stream.Read(8)
FirstStartIP=AscB(MidB(Buf,1,1))+(AscB(MidB(Buf,2,1))*256)+(AscB(MidB(Buf,3,1))*256*256)+(AscB(MidB(Buf,4,1))*256*256*256)
LastStartIP=AscB(MidB(Buf,5,1))+(AscB(MidB(Buf,6,1))*256)+(AscB(MidB(Buf,7,1))*256*256)+(AscB(MidB(Buf,8,1))*256*256*256)
RecordCount=Int((LastStartIP-FirstStartIP)/7)
If (RecordCount<=1) Then
Country="Unknow"
QQWry=2
Exit Function
End If
RangB=0
RangE=RecordCount
Do While (RangB<(RangE-1))
RecNo=Int((RangB+RangE)/2)
Call GetStartIP (RecNo)
If (IP=StartIP) Then
RangB=RecNo
Exit Do
End If
If (IP>StartIP) Then
RangB=RecNo
Else
RangE=RecNo
End If
Loop
Call GetStartIP(RangB)
Call GetEndIP()
If (StartIP<=IP) And ( EndIP>=IP) Then

nRet=0
Else

nRet=3
End If
Call GetCountry(IP)
QQWry=nRet
End Function

Private Sub Class_Terminate()
On ErrOr Resume Next
Stream.Close
If Err Then Err.Clear
Set Stream=Nothing
End Sub
End Class

Function Look_Ip(path,IP)
Dim Wry, IPType, QQWryVersion, IpCounter
Set Wry = New TQQWry
Wry.SetPath path
On Error Resume Next
IPType = Wry.QQWry(IP)
Look_Ip = Wry.Country & " - " & Wry.LocalStr
If Err Then
Err.Clear
Look_Ip = "查询出错"
End If
End Function
%>

下面是查询代码,请保存为search.asp

<!--#include file="cz.asp" -->
<%
Dim IP
ip=request.querystring("ip")

if trim(ip)="" then
IP=Request.ServerVariables("REMOTE_ADDR")
elseif ubound(split(trim(ip),"."))<>3 then
IP=Request.ServerVariables("REMOTE_ADDR") 'ip地址
end if
IPAdd=Look_Ip("cz.dat",IP) '这里注意,数据库文件名是cz.dat
response.write IPAdd
%>

热心网友 时间:2022-05-03 07:19

'给你一个获得IP的函数,如果想得到地理位置,需要一个IP数据库,类似QQ显IP的数据库,暂时没有。
Function GetIP()
If Request.ServerVariables("HTTP_X_FORWARDED_FOR") = "" OR InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), "unknown") > 0 Then
GetIP = Request.ServerVariables("REMOTE_ADDR")
ElseIf InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",") > 0 Then
GetIP = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1, InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",")-1)
ElseIf InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";") > 0 Then
GetIP = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1, InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";")-1)
Else
GetIP = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
End If
GetIP = Trim(Mid(GetIP, 1, 30))
End Function

热心网友 时间:2022-05-03 08:54

这种显示你需要有ip地址与地理位置对应的地址库才可以。

热心网友 时间:2022-05-03 10:45

什么啊
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
电脑两磁盘怎么用win7系统一台电脑使用2个硬盘怎么装双系统 SSD和HDD怎么混合使用玩游戏 ...个旧的机械硬盘和一个新的固态硬盘怎么装WIN7系统 青萝卜怎么做 青萝卜做法 全国的自考试卷都一样吗 成人自考考试科目都是统一的吗 自考的试卷是全国统一的吗 2024年自考考的科目都一样吗 联想电源管理软件详解 电脑关机哪个键电脑关机的快捷键是什么啊 int *ip2[4]应该怎样初始化 java算法 将ip地址段拆分成一个个 腊肉放冷藏可以放多久? 朋友圈屏蔽了对方、给对方朋友圈点赞对方能看见吗? 蒸馒头要放多少碱? 蒸馒头放什么东西蓬松? 蒸馒头放多少合适? 重装系统键盘不能用?灯不亮,怎么这样的? windows 10 如何关闭系统键盘? 进入系统键盘不好用了 xp的系统键盘使用的快捷键都有哪些? 系统键盘怎么打开? BIOS,系统键盘是什么 系统键盘怎么调用 win7系统键盘怎么打开 收银系统键盘在哪里可以找出来 特灵*空调四面出风嵌入式空调器制热时亮红灯,不启动,是什么原因 特灵中央空调怎么调制热 特灵变频中央空调CGVR0505AANA显示18E故障代码是什么引起的? 特灵中央空调出现5d 怎么解决? 求C语言高人帮助,纯C编写IP转换数字程序 win10保存2个ip地址怎么设置,一个自动,一个是设定好的 自家晒的腊肉能放多久 IP各号段代表什么意思呢? 内外网通过ip能区分? 真空包装腊肉放冰箱里冷藏半年能吃吗 c语言以IP地址形式输出 IPAddress类的应用,构建的IPAddress[]数组要怎么添加啊? 如何计算两个IP之间的IP数量 int ip = 0x0808A8C0; 这是一个网络字节序的ip地址. 写一个函数, 将它以点分十进制的方式打印出来. java做ip转int时,碰到如下代码,对移位运算部分不太理解 保险公司会倒么 请问保险公司会不会倒闭呢?我身边的朋友不敢买保险他们老是纠结这个问题? 怎么看别人的qq达人天数 qq达人过了30怎么查看以前掉的记录? 怎么能够看到对方的qq达人天数 在生活中折叠隐形纱窗需要哪些技巧 折叠隐形纱窗型材怎么挑选的呀? 回卷隐形纱窗和折叠隐形纱窗哪个好 隐形纱窗如何穿线