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异步任务队列示例
Apr 01 Python
Tensorflow之构建自己的图片数据集TFrecords的方法
Feb 07 Python
python实现求解列表中元素的排列和组合问题
Mar 15 Python
python3 读写文件换行符的方法
Apr 09 Python
Python处理CSV与List的转换方法
Apr 19 Python
Python FTP两个文件夹间的同步实例代码
May 25 Python
pandas实现to_sql将DataFrame保存到数据库中
Jul 03 Python
Python交互式图形编程的实现
Jul 25 Python
python 递归调用返回None的问题及解决方法
Mar 16 Python
jupyter实现重新加载模块
Apr 16 Python
Pytorch转onnx、torchscript方式
May 25 Python
Numpy中ndim、shape、dtype、astype的用法详解
Jun 14 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
php中对2个数组相加的函数
2011/06/24 PHP
php中的一些数组排序方法分享
2012/07/20 PHP
php操作mongoDB实例分析
2014/12/29 PHP
php定义参数数量可变的函数用法实例
2015/03/16 PHP
给WordPress的编辑后台添加提示框的代码实例分享
2015/12/25 PHP
PHP结合Ueditor并修改图片上传路径
2016/10/16 PHP
ie 处理 gif动画 的onload 事件的一个 bug
2007/04/12 Javascript
javascript KeyDown、KeyPress和KeyUp事件的区别与联系
2009/12/03 Javascript
JS中动态添加事件(绑定事件)的代码
2011/01/09 Javascript
基于jquery的blockui插件显示弹出层
2011/04/14 Javascript
js自动下载文件到本地的实现代码
2013/04/28 Javascript
JQuery文本改变触发事件如聚焦事件、失焦事件
2014/01/15 Javascript
js跨浏览器的事件侦听器和事件对象的使用方法
2015/12/17 Javascript
JS中的二叉树遍历详解
2016/03/18 Javascript
基于javascript制作经典传统的拼图游戏
2016/03/22 Javascript
JavaScript地理位置信息API
2016/06/11 Javascript
jQuery绑定自定义事件的魔法升级版
2016/06/30 Javascript
什么是JavaScript注入攻击?
2016/09/14 Javascript
vue.js的手脚架vue-cli项目搭建的步骤
2017/08/30 Javascript
使用SVG基本操作API的实例讲解
2017/09/14 Javascript
VUE解决微信签名及SPA微信invalid signature问题(完美处理)
2019/03/29 Javascript
vue使用keep-alive保持滚动条位置的实现方法
2019/04/09 Javascript
利用Python爬虫给孩子起个好名字
2017/02/14 Python
Python中查看文件名和文件路径
2017/03/31 Python
浅谈Python中的zip()与*zip()函数详解
2018/02/24 Python
Python 串口读写的实现方法
2019/06/12 Python
基于python爬取有道翻译过程图解
2020/03/31 Python
Python 使用Opencv实现目标检测与识别的示例代码
2020/09/08 Python
python hmac模块验证客户端的合法性
2020/11/07 Python
自荐信的两点禁忌
2013/10/30 职场文书
安全检查验收制度
2014/01/12 职场文书
留学顾问岗位职责
2014/04/14 职场文书
我们的节日国庆活动方案
2014/08/19 职场文书
学校关爱留守儿童活动方案
2014/08/27 职场文书
综治工作心得体会
2014/09/11 职场文书
商务宴会祝酒词
2015/08/11 职场文书