首先,是前人寫的ASP查詢純真IP的類,請保存為cz.asp  需要一個ip數(shù)據(jù)庫,把cz.asp,serach.asp和cz.dat數(shù)據(jù)庫放在一起。  <% 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)  '這里注意,數(shù)據(jù)庫文件名是cz.dat response.write IPAdd %>