把一个网际协议地址(IP 地址)和它所在的物理地址关联起来,可以用 MaxMind 公司提供的一个可以免费获取的开源数据库 GeoLiteCity。有了这个数据库,就可以把 IP 地址与对应的国家、邮政编码、国家名称以及常规经纬度坐标关联起来。
Jennifer Ennis 编写了一个查询 GeoLiteCity 数据库的纯 Python 库——pygeoip。城市(city)、区域名称(region_name)、邮政编码(postal_code)、国名(country_name)、经纬度以及其他识别信息的记录
import pygeoip
gi = pygeoip.GeoIP("/opt/GetIP/Geo.dat")
def print_record(target):
rec = gi.recory_by_name(target)
city = rec["city"]
region = rec["region_name"]
country = rec["country_name"]
long = rec["longitude"]
lat = rec["latitude"]
print("[*] Target: {} Geo-located.".format(target))
print("[+] {}, {}, {}".format(city, region, country))
print("[+] Latitude: {}, Longitude: {}".format(lat, long))
target = "173.255.226.98"
print_record(target)Dpkt 允许逐个分析抓包文件里的各个数据包,并检查数据包中的每个协议层。也可以使用 pypcap 分析当前的实时流量。
import dpkt
import socket
def print_pcap(pcap):
for ts, buf in pcap:
try:
eth = dpkt.ethernet.Ethernet(buf)
ip = eth.data
src = socket.inet_ntoa(ip.src)
dst = socket.inet_ntoa(ip.dst)
print("[+] Src: {} --> Dst: {}".format(src, dst))
except:
pass
def main():
f = open("geotest.pcap")
pcap = dpkt.pcap.Reader(f)
print_pcap(pcap)谷歌地图能在一个专门的界面中显示出一个虚拟地球仪、地图和地理信息。虽然用的是专用的界面,但谷歌地图可以让你很方便地在地球仪上画出指定位置或轨迹。通过创建一个扩展名为 KML 的文本文件,用户可以把许多个地理位置标在谷歌地球上。KML 是有特定规定的 XML 结构。
写一个函数 ret_KML 接收一个 IP,并返回表示该 IP 地址对应物理地址的 KML 结构
def ret_kml(ip):
rec = gi.record_by_name(ip)
try:
longitude = rec["longitude"]
latitude= rec["latitude"]
kml = (
"
"
"%s
"
"
"
"%6f,%6f
"
"
"
"
"
) % (ip, longitude, latitude)
return kml
except Exception as e:
return ""可能想要使用不同的图标来表示不同类型的网络流量,比如可以用源和目标 TCP 端口来区分不同的网络流量。可以查看谷歌 KML 文档。
| 留言与评论(共有 0 条评论) “” |