首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >python 根据ip获取地理位置

python 根据ip获取地理位置

作者头像
用户5760343
发布2019-07-31 15:54:22
发布2019-07-31 15:54:22
2.4K0
举报
文章被收录于专栏:sktjsktj

http://dev.maxmind.com/geoip/legacy/geolite/

!/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 <pcap file>') 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()

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.07.29 ,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • http://dev.maxmind.com/geoip/legacy/geolite/
  • !/usr/bin/python
  • coding=utf-8
  • 查询数据库相关的城市信息并输出
  • 返回指定IP地址对应的物理位置
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档