python 通过ip获取城市_python 根据ip获取地理位置

!/usr/bin/python

coding=utf-8

import dpkt

import socket

import pygeoip

import optparse

gi = pygeoip.GeoIP('GeoLiteCity.dat')

查询数据库相关的城市信息并输出

def printRecord(tgt):

rec = gi.record_by_name(tgt)

city = rec['city']

# 原来的代码为 region = rec['region_name'],已弃用'region_name'

region = rec['region_code']

country = rec['country_name']

long = rec['longitude']

lat = rec['latitude']

print '[*] Target: ' + tgt + ' Geo-located. '

print '[+] '+str(city)+', '+str(region)+', '+str(country)

print '[+] Latitude: '+str(lat)+ ', Longitude: '+ str(long)

def printPcap(pcap):

# 遍历[timestamp, packet]记录的数组

for (ts, buf) in pcap:

try:

# 获取以太网部分数据

eth = dpkt.ethernet.Ethernet(buf)

# 获取IP层数据

ip = eth.data

# 把存储在inet_ntoa中的IP地址转换成一个字符串

src = socket.inet_ntoa(ip.src)

dst = socket.inet_ntoa(ip.dst)

print '[+] Src: ' + src + ' --> Dst: ' + dst

print '[+] Src: ' + retGeoStr(src) + '--> Dst: ' + retGeoStr(dst)

except:

pass

返回指定IP地址对应的物理位置

def retGeoStr(ip):

try:

rec = gi.record_by_name(ip)

city = rec['city']

country = rec['country_code3']

if city != '':

geoLoc = city + ', ' + country

else:

geoLoc = country

return geoLoc

except Exception, e:

return 'Unregistered'

def main():

parser = optparse.OptionParser('[*]Usage: python geoPrint.py -p ')

parser.add_option('-p', dest='pcapFile', type='string', help='specify pcap filename')

(options, args) = parser.parse_args()

if options.pcapFile == None:

print parser.usage

exit(0)

pcapFile = options.pcapFile

f = open(pcapFile)

pcap = dpkt.pcap.Reader(f)

printPcap(pcap)

if name == 'main':

main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值