为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

VB 使用纯真ip数据库查询ip地理位置

2017-09-21 14页 doc 38KB 23阅读

用户头像

is_842972

暂无简介

举报
VB 使用纯真ip数据库查询ip地理位置VB 使用纯真ip数据库查询ip地理位置 VB ä,?ç??çº?真ipæ??æ??åº?æŸ,è??ipåœ?ç?†ä,?ç,? (2011-05-21 10:15:56) æ ‡ç??ﵚ vb ipåœ?å?? ç??æ??å ? ç??æ?? æ??æ??åº? æ?‚è?ˆ 'ä,?ç??è?,å‡,æ??æŸ,è?? Public Function GetAddress(sip) If Len(sip) < 5 Then GetAddress = "è??å…,IPé??è??ﵕ...
VB 使用纯真ip数据库查询ip地理位置
VB 使用纯真ip数据库查询ip地理位置 VB ä,?ç??çº?真ipæ??æ??åº?æŸ,è??ipåœ?ç?†ä,?ç,? (2011-05-21 10:15:56) æ ‡ç??ﵚ vb ipåœ?å?? ç??æ??å ? ç??æ?? æ??æ??åº? æ?‚è?ˆ 'ä,?ç??è?,å‡,æ??æŸ,è?? Public Function GetAddress(sip) If Len(sip) < 5 Then GetAddress = "è??å…,IPé??è??ﵕ" Exit Function End If On Error Resume Next Dim Wry, IPType Set Wry = New ShowIp If Not Wry.IsIp(sip) Then GetAddress = " è??å…,IPé??è??ﵕ" Exit Function End If IPType = Wry.QQWry(sip) GetAddress = Wry.Country & " " & Wry.LocalStr End Function 'ç??æ??å ?,å?,å ä?ºShowIp ' ============================================ ' å??é‡?å??å?? ' ============================================ Public Country, LocalStr, Buf, OffSet Private StartIP, EndIP, CountryFlag Public QQWryFile Public FirstStartIP, LastStartIP, RecordCount Private Stream, EndIPOff ' ============================================ ' ç??æ??å ?åˆ?å?‹åŒ? ' ============================================ Private Sub Class_Initialize() On Error Resume Next Country = "" LocalStr = "" StartIP = 0 EndIP = 0 CountryFlag = 0 FirstStartIP = 0 LastStartIP = 0 EndIPOff = 0 QQWryFile = "QQWry.Dat" 'QQ IPåº?è??å?„ End Sub ' ============================================ ' IPåœ?å??è,?æ??æˆ?æ??æ?? ' ============================================ Function Iptoint(IP) As Single Dim IPArray, i, Iptoint1 As Single, Iptoint2 As Single, Iptoint3 As Single, Iptoint4 As Single 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 Iptoint1 = CInt(IPArray(3)) Iptoint2 = CInt(IPArray(2)): Iptoint2 = Iptoint2 * 256 Iptoint3 = CInt(IPArray(1)): Iptoint3 = Iptoint3 * 256: Iptoint3 = Iptoint3 * 256 Iptoint4 = CInt(IPArray(0)): Iptoint4 = Iptoint4 * 256: Iptoint4 = Iptoint4 * 256: Iptoint4 = Iptoint4 * 256 Iptoint = Iptoint1 + Iptoint2 + Iptoint3 + Iptoint4 'è??ä?ªç??æ??åœ?VBä??䵚有æº?出?ä??çŸ,é??ä??ä?ˆå?Ÿå› Iptoint = ((CInt(IPArray(0)) * 256 * 256 + CInt(IPArray(1)) * 256 + CInt(IPArray(2))) * Iptoint + CInt(IPArray(3)) End Function ' ============================================ ' æ??æ??é?†è,?IPåœ?å?? ' ============================================ Function IntToIP(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 IntToIP = CStr(p1) & "." & CStr(p2) & "." & CStr(p3) & "." & CStr(p4) End Function ' ============================================ ' è??å ?åµ?å?‹IPä, ç?? ' ============================================ Private Function GetStartIP(RecNo) OffSet = FirstStartIP + RecNo * 7 Stream.Position = OffSet Buf = Stream.Read(7) FirstStartIP1 = AscB(MidB(Buf, 1, 1)) FirstStartIP2 = AscB(MidB(Buf, 2, 1)): FirstStartIP2 = FirstStartIP2 * 256 FirstStartIP3 = AscB(MidB(Buf, 3, 1)): FirstStartIP3 = FirstStartIP3 * 256: FirstStartIP3 = FirstStartIP3 * 256 FirstStartIP4 = AscB(MidB(Buf, 4, 1)): FirstStartIP4 = FirstStartIP4 * 256: FirstStartIP4 = FirstStartIP4 * 256: FirstStartIP4 = FirstStartIP4 * 256 StartIP = FirstStartIP1 + FirstStartIP2 + FirstStartIP3 + FirstStartIP4 LastStartIP1 = AscB(MidB(Buf, 5, 1)) LastStartIP2 = AscB(MidB(Buf, 6, 1)): LastStartIP2 = LastStartIP2 * 256 LastStartIP3 = AscB(MidB(Buf, 7, 1)): LastStartIP3 = LastStartIP3 * 256: LastStartIP3 = LastStartIP3 * 256 'LastStartIP4 = AscB(MidB(Buf, 8, 1)): LastStartIP4 = LastStartIP4 * 256: LastStartIP4 = LastStartIP4 * 256: LastStartIP4 = LastStartIP4 * 256 EndIPOff = LastStartIP1 + LastStartIP2 + LastStartIP3 '+ LastStartIP4 'è??ä?ªç??æ??åœ?VBä??䵚有æº?出?ä??çŸ,é??ä??ä?ˆå?Ÿå› EndIPOff = AscB(MidB(Buf, 5, 1)) + (AscB(MidB(Buf, 6, 1)) * 256) + (AscB(MidB(Buf, 7, 1)) * 256 * 256) 'è??ä?ªç??æ??åœ?VBä??䵚有æº?出?ä??çŸ,é??ä??ä?ˆå?Ÿå› 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 ' ============================================ ' è??å ?ç??æ?ŸIPä,?ç,? ' ============================================ Private Function GetEndIP() Stream.Position = EndIPOff Buf = Stream.Read(5) FirstStartIP1 = AscB(MidB(Buf, 1, 1)) FirstStartIP2 = AscB(MidB(Buf, 2, 1)): FirstStartIP2 = FirstStartIP2 * 256 FirstStartIP3 = AscB(MidB(Buf, 3, 1)): FirstStartIP3 = FirstStartIP3 * 256: FirstStartIP3 = FirstStartIP3 * 256 FirstStartIP4 = AscB(MidB(Buf, 4, 1)): FirstStartIP4 = FirstStartIP4 * 256: FirstStartIP4 = FirstStartIP4 * 256: FirstStartIP4 = FirstStartIP4 * 256 EndIP = FirstStartIP1 + FirstStartIP2 + FirstStartIP3 + FirstStartIP4 'è??ä?ªç??æ??åœ?VBä??䵚有æº?出?ä??çŸ,é??ä??ä?ˆå?Ÿå› 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 >= Iptoint("255.255.255.0") And IP <= Iptoint("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) End Sub ' ============================================ ' è??å ?IPåœ?å??æ ‡è?†ç?? ' ============================================ 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 FirstStartIP1 = AscB(MidB(Buf, 1, 1)) FirstStartIP2 = AscB(MidB(Buf, 2, 1)): FirstStartIP2 = FirstStartIP2 * 256 FirstStartIP3 = AscB(MidB(Buf, 3, 1)): FirstStartIP3 = FirstStartIP3 * 256: FirstStartIP3 = FirstStartIP3 * 256 OffSet = FirstStartIP1 + FirstStartIP2 + FirstStartIP3 ' + FirstStartIP4 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 ' ============================================ ' æ ?å?ƒå‡,æ??﵌æ‰?è?ŒIPæ œç?? ' ============================= =============== Public Function QQWry(DotIP) Dim IP, nRet Dim RangB, RangE, RecNo Dim FirstStartIP1, FirstStartIP2, FirstStartIP3, FirstStartIP4 Dim LastStartIP1, LastStartIP2, LastStartIP3, LastStartIP4 IP = Iptoint(DotIP) Set Stream = CreateObject("ADodb.Stream") Stream.Mode = 3 Stream.Type = 1 Stream.Open Stream.LoadFromFile QQWryFile Stream.Position = 0 Buf = Stream.Read(8) FirstStartIP1 = AscB(MidB(Buf, 1, 1)) FirstStartIP2 = AscB(MidB(Buf, 2, 1)): FirstStartIP2 = FirstStartIP2 * 256 FirstStartIP3 = AscB(MidB(Buf, 3, 1)): FirstStartIP3 = FirstStartIP3 * 256: FirstStartIP3 = FirstStartIP3 * 256 FirstStartIP4 = AscB(MidB(Buf, 4, 1)): FirstStartIP4 = FirstStartIP4 * 256: FirstStartIP4 = FirstStartIP4 * 256: FirstStartIP4 = FirstStartIP4 * 256 FirstStartIP = FirstStartIP1 + FirstStartIP2 + FirstStartIP3 + FirstStartIP4 LastStartIP1 = AscB(MidB(Buf, 5, 1)) LastStartIP2 = AscB(MidB(Buf, 6, 1)): LastStartIP2 = LastStartIP2 * 256 LastStartIP3 = AscB(MidB(Buf, 7, 1)): LastStartIP3 = LastStartIP3 * 256: LastStartIP3 = LastStartIP3 * 256 LastStartIP4 = AscB(MidB(Buf, 8, 1)): LastStartIP4 = LastStartIP4 * 256: LastStartIP4 = LastStartIP4 * 256: LastStartIP4 = LastStartIP4 * 256 LastStartIP = LastStartIP1 + LastStartIP2 + LastStartIP3 + LastStartIP4 'è??ä?ªç??æ??åœ?VBä??䵚有æº?出?ä??çŸ,é??ä??ä?ˆå?Ÿå› LastStartI P = 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) ' åœ?æ??æ??åº?ä??æ‰?ä??åˆ?ä??ä,?IPåœ?å?? If (RecordCount <= 1) Then Country = "未çŸ," 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 ' ============================================ ' æ??æŸ,IPåœ?å??å?ˆæ??æ?? ' ============================================ Public Function IsIp(IP) varparts = Split( IP, ".") Debug.Print UBound(varparts) If UBound(varparts) <> 3 Then IsIp = False Exit Function End If For i = 0 To 3 If Val(varparts(i)) > 255 Or Val(varparts(i)) < 0 Then IsIp = False Exit Function Else IsIp = True End If Next i End Function ' ============================================ ' ç??ç?ˆç?? ' ============================================ Private Sub Class_Terminate() On Error Resume Next Stream.Close If Err Then Err.Clear Set Stream = Nothing End Sub
/
本文档为【VB 使用纯真ip数据库查询ip地理位置】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索