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 相关文章推荐
zbar解码二维码和条形码示例
Feb 07 Python
Python多线程编程(四):使用Lock互斥锁
Apr 05 Python
Python编程pygal绘图实例之XY线
Dec 09 Python
解决python删除文件的权限错误问题
Apr 24 Python
Django uwsgi Nginx 的生产环境部署详解
Feb 02 Python
对Python3 解析html的几种操作方式小结
Feb 16 Python
Python对HTML转义字符进行反转义的实现方法
Apr 28 Python
python设置代理和添加镜像源的方法
Feb 14 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
Jun 02 Python
利用Python实现字幕挂载(把字幕文件与视频合并)思路详解
Oct 21 Python
python中count函数知识点浅析
Dec 17 Python
python playwrigh框架入门安装使用
Jul 23 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分区性能的详细介绍
2013/05/02 PHP
PHP中echo,print_r与var_dump区别分析
2014/09/29 PHP
PHP图像处理类库MagickWand用法实例分析
2015/05/21 PHP
Yii隐藏URL中index.php的方法
2016/07/12 PHP
thinkphp自定义权限管理之名称判断方法
2017/04/01 PHP
静态的动态续篇之来点XML
2006/12/23 Javascript
JavaScript Cookie 直接浏览网站分网址
2009/12/08 Javascript
Jquery 滑入滑出效果实现代码
2010/03/27 Javascript
JavaScript 保存数组到Cookie的代码
2010/04/14 Javascript
JavaScript移除数组元素减少长度的方法
2013/09/05 Javascript
关注jquery技巧提高jquery技能(前端开发必学)
2015/11/02 Javascript
AngularJS入门教程之路由与多视图详解
2016/08/19 Javascript
详解Vue 如何监听Array的变化
2019/06/06 Javascript
ElementUI中el-tree节点的操作的实现
2020/02/27 Javascript
javascript实现前端分页功能
2020/11/26 Javascript
python 字符串split的用法分享
2013/03/23 Python
python计算一个序列的平均值的方法
2015/07/11 Python
Linux系统上Nginx+Python的web.py与Django框架环境
2015/12/25 Python
深入解析Python的Tornado框架中内置的模板引擎
2016/07/11 Python
解决Python2.7读写文件中的中文乱码问题
2018/04/12 Python
python 除法保留两位小数点的方法
2018/07/16 Python
python生成器/yield协程/gevent写简单的图片下载器功能示例
2019/10/28 Python
Python Sympy计算梯度、散度和旋度的实例
2019/12/06 Python
python实现将视频按帧读取到自定义目录
2019/12/10 Python
python 实现两个线程交替执行
2020/05/02 Python
pandas数据分组groupby()和统计函数agg()的使用
2021/03/04 Python
英国最大的高品质珠宝和手表专家:Goldsmiths
2017/03/11 全球购物
简历里的自我评价范文
2014/02/24 职场文书
2014春晚主持词
2014/03/25 职场文书
大一新生学期自我评价
2014/04/09 职场文书
大学活动总结格式
2014/04/29 职场文书
村党支部群众路线教育实践活动对照检查材料
2014/09/26 职场文书
全国法制宣传日活动总结2014
2014/11/01 职场文书
租车协议书范本2014
2014/11/17 职场文书
小型婚礼主持词
2015/06/30 职场文书
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
2022/04/21 Python