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中的闭包和装饰器
Jun 12 Python
socket + select 完成伪并发操作的实例
Aug 15 Python
微信跳一跳python辅助软件思路及图像识别源码解析
Jan 04 Python
pandas按若干个列的组合条件筛选数据的方法
Apr 11 Python
Python实现的简单线性回归算法实例分析
Dec 26 Python
Python利用heapq实现一个优先级队列的方法
Feb 03 Python
详解Python中is和==的区别
Mar 21 Python
Django中使用Whoosh进行全文检索的方法
Mar 31 Python
python的常见矩阵运算(小结)
Aug 07 Python
使用matplotlib动态刷新指定曲线实例
Apr 23 Python
使用SQLAlchemy操作数据库表过程解析
Jun 10 Python
OpenCV-Python实现人脸美白算法的实例
Jun 11 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
MySql中正则表达式的使用方法描述
2008/07/30 PHP
fleaphp crud操作之find函数的使用方法
2011/04/23 PHP
[原创]PHPCMS遭遇会员投稿审核无效的解决方法
2017/01/11 PHP
DOM精简教程
2006/10/03 Javascript
IE8 引入跨站数据获取功能说明
2008/07/22 Javascript
ie6下png图片背景不透明的解决办法使用js实现
2013/01/11 Javascript
js实现瀑布流的一种简单方法实例分享
2013/11/04 Javascript
Jquery倒计时源码分享
2014/05/16 Javascript
技术男用来对妹子表白的百度首页
2014/07/23 Javascript
判断浏览器的内核及版本号方法汇总
2015/01/05 Javascript
jQuery实现tag便签去重效果的方法
2015/01/20 Javascript
最流行的Node.js精简型和全栈型开发框架介绍
2015/02/26 Javascript
基于Angularjs+mybatis实现二级评论系统(仿简书)
2017/02/13 Javascript
JS实现提交表单前的数字及邮箱校检功能
2017/11/13 Javascript
其实你可以少写点if else与switch(推荐)
2019/01/10 Javascript
html+jQuery实现拖动滑块图片拼图验证码插件【移动端适用】
2019/09/10 jQuery
微信小程序实现购物车功能
2020/11/18 Javascript
CentOS 8.2服务器上安装最新版Node.js的方法
2020/12/16 Javascript
Python读写配置文件的方法
2015/06/03 Python
python 3.6 +pyMysql 操作mysql数据库(实例讲解)
2017/12/20 Python
python f-string式格式化听语音流程讲解
2019/06/18 Python
安装2019Pycharm最新版本的教程详解
2019/10/22 Python
keras中的backend.clip用法
2020/05/22 Python
Python colormap库的安装和使用详情
2020/10/06 Python
Python安装并操作redis实现流程详解
2020/10/13 Python
python+openCV对视频进行截取的实现
2020/11/27 Python
保加利亚运动鞋购物网站:SneakerStudio.bg
2020/12/23 全球购物
光电信息专业应届生求职信
2013/10/07 职场文书
测试工程师职业规划书
2014/02/06 职场文书
高中军训感想800字
2014/02/23 职场文书
违反交通法规检讨书
2014/09/10 职场文书
部门群众路线教育实践活动对照检查材料思想汇报
2014/10/07 职场文书
机关职员工作检讨书
2014/10/23 职场文书
让世界充满爱观后感
2015/06/10 职场文书
六一儿童节致辞稿(3篇)
2019/07/11 职场文书
Python max函数中key的用法及原理解析
2021/06/26 Python