python实现获取Ip归属地等信息


Posted in Python onAugust 27, 2016

如果你有一批IP地址想要获得这些IP具体的信息,比如归属国家,城市等,最好的办法当时是调用现有的api接口来获取,我在之前就写过一篇文章,是关于我的博客被莫名攻击的时,就有获取过一批IP,攻击的时候当时是恢复业务重要,IP该封的就要封,攻击过后这个攻击者的IP信息,自己就可以分析下都来自哪里,有没有什么特征,帮助提示自己网站的安全性,今天这个脚本就是根据提供的IP获得IP归属的具体信息,脚本如下:

#!/usr/bin/env python
 
import requests
import csv
 
def getIp(file):
  iplist = []
  fi = open(file, 'r')
  for ip in fi:
    ip = ip.strip()
    iplist.append(ip)
  return iplist
 
def get_geolocation(ip):
  r = requests.get('https://freegeoip.net/json/' + ip)
  info = [str(r.json()['country_name']), str(r.json()['city'])]
  return {'ip':ip, 'country_name':info[0], 'city_name':info[1]}
 
if __name__ == '__main__':
  iplist = getIp('/root/ipfile')
  f = open('outputinfo.csv', 'a+')
  fieldnames = ['ip', 'country_name', 'city_name']
  dict_writer = csv.DictWriter(f, fieldnames=fieldnames)
  dict_writer.writerow(dict(zip(fieldnames, fieldnames)))
  for ip in iplist:
    data = get_geolocation(ip)
    dict_writer.writerow(data)

脚本解释,定义了2个函数,getIp()函数从文件中读取IP信息,返回一个列表,get_geolocation()函数负责实际得到信息,返回一个字典,接着在主函数打开一个可写的csv文件,通过循环将得到的信息写入一个CSV文件中,在写入csv 文件时用到了csv.DictWriter字典写的功能,这个还是比较实用,可以将数据结构类型为字典的数据直接写入csv文件,换句话说就是你只要把你要写的数据转换成字典的形式,就可以很方便的写入了,比如我这句dict(zip(fieldnames, fieldnames))其实就是这个功能,大家以后用到操作csv文件时,可以自己实践实践。

最后附上一则网友的代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#查找IP地址归属地
#writer by keery_log
#Create time:2013-10-30
#Last update:2013-10-30
#用法: python chk_ip.py www.google.com |python chk_ip.py 8.8.8.8 |python chk_ip.py ip.txt
 
import signal
import urllib
import json
import sys,os,re
import socket
 
if len(sys.argv) <= 1 :
  print "Please input ip address !"
  sys.exit(0)
 
def handler(signum, frame):
  sys.exit(0)
signal.signal(signal.SIGINT, handler)
 
url = "http://ip.taobao.com/service/getIpInfo.php?ip="
 
#查找IP地址
def ip_location(ip):
  data = urllib.urlopen(url + ip).read()
  datadict=json.loads(data)
 
  for oneinfo in datadict:
    if "code" == oneinfo:
      if datadict[oneinfo] == 0:
        return datadict["data"]["country"] + datadict["data"]["region"] + datadict["data"]["city"] + datadict["data"]["isp"]
 
#定义IP与域名正则
re_ipaddress = re.compile(r'^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$')
re_domain = re.compile(r'[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?')
 
if os.path.isfile(sys.argv[1]): #如果参数是文件,迭代查找
  file_path = sys.argv[1]
  fh = open(file_path,'r')
  for line in fh.readlines():
    if re_ipaddress.match(line):
      city_address = ip_location(line)
      print line.strip() + ":" + city_address
else:
  ip_address = sys.argv[1]
  if re_ipaddress.match(ip_address): #如果参数是单个IP地址
    city_address = ip_location(ip_address)
    print ip_address + ":" + city_address
  elif(re_domain.match(ip_address)): #如果参数是域名
    result = socket.getaddrinfo(ip_address, None)
    ip_address = result[0][4][0]
    city_address = ip_location(ip_address)
    print ip_address.strip() + ":" + city_address
Python 相关文章推荐
python sys模块sys.path使用方法示例
Dec 04 Python
跟老齐学Python之不要红头文件(1)
Sep 28 Python
Python操作Redis之设置key的过期时间实例代码
Jan 25 Python
详解Django中间件执行顺序
Jul 16 Python
Python常见MongoDB数据库操作实例总结
Jul 24 Python
python三方库之requests的快速上手
Mar 04 Python
浅析pip安装第三方库及pycharm中导入第三方库的问题
Mar 10 Python
python中 _、__、__xx__()区别及使用场景
Jun 30 Python
pytest进阶教程之fixture函数详解
Mar 29 Python
Django开发RESTful API实现增删改查(入门级)
May 10 Python
python+opencv实现目标跟踪过程
Jun 21 Python
python index() 与 rindex() 方法的使用示例详解
Dec 24 Python
python简单实现获取当前时间
Aug 27 #Python
python使用psutil模块获取系统状态
Aug 27 #Python
Django Highcharts制作图表
Aug 27 #Python
Python连接DB2数据库
Aug 27 #Python
使用python绘制常用的图表
Aug 27 #Python
python实现实时监控文件的方法
Aug 26 #Python
Python爬取京东的商品分类与链接
Aug 26 #Python
You might like
smarty+adodb+部分自定义类的php开发模式
2006/12/31 PHP
php中实现记住密码下次自动登录的例子
2014/11/06 PHP
php基于协程实现异步的方法分析
2019/07/17 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
通过javascript设置css属性的代码
2009/12/28 Javascript
jQuery Dialog 弹出层对话框插件
2010/08/09 Javascript
原来Jquery.load的方法可以一直load下去
2011/03/28 Javascript
jQuery弹出层始终垂直居中相对于屏幕或当前窗口
2013/04/01 Javascript
jQuery实现高亮显示网页关键词的方法
2015/08/07 Javascript
深入理解jQuery之事件移除
2016/06/02 Javascript
使用jQuery的load方法设计动态加载及解决被加载页面js失效问题
2017/03/01 Javascript
详解JS异步加载的三种方式
2017/03/07 Javascript
AngularJS实现自定义指令与控制器数据交互的方法示例
2017/06/19 Javascript
js获取html页面代码中图片地址的实现代码
2018/03/05 Javascript
vue权限路由实现的方法示例总结
2018/07/29 Javascript
Javascript地址引用代码实例解析
2020/02/25 Javascript
解决angular 使用原生拖拽页面卡顿及表单控件输入延迟问题
2020/04/21 Javascript
Vue跨域请求问题解决方案过程解析
2020/08/07 Javascript
Vue 简单实现前端权限控制的示例
2020/12/25 Vue.js
详解Python安装tesserocr遇到的各种问题及解决办法
2019/03/07 Python
Ubuntu16安装Python3.9的实现步骤
2020/12/15 Python
详解CSS3中border-image的使用
2015/07/18 HTML / CSS
美国领先的水果篮送货公司和新鲜水果供应商:The Fruit Company
2018/02/13 全球购物
日本著名的服饰鞋帽综合类购物网站:MAGASEEK
2019/01/09 全球购物
Bose美国官网:购买Bose耳机和音箱
2019/03/10 全球购物
世界上最大的冷却器制造商:Igloo Coolers
2019/07/23 全球购物
乌克兰排名第一的在线旅游超市:Farvater.Travel
2020/01/02 全球购物
顶岗实习接收函
2014/01/09 职场文书
信息学院毕业生自荐信范文
2014/03/04 职场文书
房屋租赁合同补充协议
2014/10/11 职场文书
个人政风行风自查自纠报告
2014/10/21 职场文书
文案策划岗位职责
2015/02/11 职场文书
国庆阅兵观后感
2015/06/15 职场文书
学生会工作感言
2015/08/07 职场文书
护士医德医风心得体会
2016/01/25 职场文书
《确定位置》教学反思
2016/02/18 职场文书