pygeoip通过域名 IP获得地理位置

时间:2022-07-22
本文章向大家介绍pygeoip通过域名 IP获得地理位置,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

很多恶意的网络行为,会很明显的在ip位置中凸显出来,比如一个域名,经常访问的大多数人应该位置于中国大陆,可以是最近出现了美国纽约的ip与该域名的文件通信。

我们就可以快速的进行访问,并进行恶意拦截。

MaxMind公司提供了一个开源了Geoliteip数据库,可以提供域名或ip的快速定位。

下载链接

wget http://geolite.maxmind.com/download/geoip/database/    GeoLiteCity.dat.gz 

通过域名和ip获取地理位置

import pygeoip as pygeoip
gi = pygeoip.GeoIP('/opt/GeoIP/GeoIP.dat') 
def getGeoByIP(tgt):    
    rec = gi.record_by_addr(tgt)    
    city = rec['city']    
    country = rec['country_name']
    long = rec['longitude']    
    lat = rec['latitude']    
    print('[*] Target: ' + tgt + ' Geo-located. ') 
    print('[+] '+str(city)+', '+str(country))    
    print('[+] Latitude: '+str(lat)+ ', Longitude: '+ str(long)) tgt = '173.255.226.98')

def getGeoByName(name):
    rec = gi.record_by_name(tgt)    
    city = rec['city']    
    country = rec['country_name']
    long = rec['longitude']    
    lat = rec['latitude']    
    print('[*] Target: ' + tgt + ' Geo-located. ') 
    print('[+] '+str(city)+', '+str(country))    
    print('[+] Latitude: '+str(lat)+ ', Longitude: '+ str(long)) tgt = '173.255.226.98')

getGeoByIP(tgt)
getGeoByName(name)

同时可以生成google地球需要的kml文件,导入google地球就可以看到地球上的位置。

def retKML(ip):    
    rec = gi.record_by_name(ip)    
        try:        
            longitude = rec['longitude']        latitude = rec['latitude']        
            kml = ('<Placemark>n'               '<name>%s</name>n'               '<Point>n'               '<coordinates>%6f,%6f</coordinates>n'               '</Point>n'               '</Placemark>n'                ) % (ip,longitude, latitude)        
            return kml
    except Exception, e:        
        return ''

def plotIPs(pcap):    
    kmlPts = ''    
    for (ts, buf) in pcap:        
        try:           
            eth = dpkt.ethernet.Ethernet(buf)   
            ip = eth.data            
            src = socket.inet_ntoa(ip.src)      srcKML = retKML(src)            
            dst = socket.inet_ntoa(ip.dst)      dstKML = retKML(dst)            
            kmlPts = kmlPts + srcKML + dstKML 
        except:            
             pass    
    return kmlPts

运行我们的脚本,我们将输出内容到KML文件中,用Google地球打开这个文 件,我们可以看到我们数据包的源地址和目的地。