很多恶意的网络行为,会很明显的在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地球打开这个文 件,我们可以看到我们数据包的源地址和目的地。