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使用Queue在多个子进程间交换数据的方法
Apr 18 Python
python在控制台输出进度条的方法
Jun 20 Python
Python使用multiprocessing实现一个最简单的分布式作业调度系统
Mar 14 Python
Python实现批量检测HTTP服务的状态
Oct 27 Python
Python 装饰器实现DRY(不重复代码)原则
Mar 05 Python
对python的bytes类型数据split分割切片方法
Dec 04 Python
python 列表、字典和集合的添加和删除操作
Dec 16 Python
Python读取YAML文件过程详解
Dec 30 Python
Tensorflow tf.dynamic_partition矩阵拆分示例(Python3)
Feb 07 Python
matplotlib jupyter notebook 图像可视化 plt show操作
Apr 24 Python
Python控制台实现交互式环境执行
Jun 09 Python
基于python模拟TCP3次握手连接及发送数据
Nov 06 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的无限分类实现想法~
2007/01/02 PHP
Yii Framework框架获取分类下面的所有子类方法
2014/06/20 PHP
PHP多进程编程实例详解
2017/07/19 PHP
javascript 避免闭包引发的问题
2009/03/17 Javascript
Prototype Hash对象 学习
2009/07/19 Javascript
让js弹出窗口居前显示的实现方法
2013/07/10 Javascript
js实现倒计时(距离结束还有)示例代码
2013/07/24 Javascript
js 弹出新页面避免被浏览器、ad拦截的一种新方法
2014/04/30 Javascript
js实现键盘上下左右键选择文字并显示在文本框的方法
2015/05/07 Javascript
详解javascript获取url信息的常见方法
2016/12/19 Javascript
jQuery取得元素标签名称小结(附代码)
2017/08/16 jQuery
Vue $emit $refs子父组件间方法的调用实例
2018/09/12 Javascript
jQuery移动端跑马灯抽奖特效升级版(抽奖概率固定)实现方法
2019/01/18 jQuery
jQuery模仿ToDoList实现简单的待办事项列表
2019/12/30 jQuery
[05:24]TI9采访——教练
2019/08/24 DOTA
Python读写配置文件的方法
2015/06/03 Python
总结Python编程中函数的使用要点
2016/03/20 Python
用python实现k近邻算法的示例代码
2018/09/06 Python
APIStar:一个专为Python3设计的API框架
2018/09/26 Python
Laravel框架表单验证格式化输出的方法
2019/09/25 Python
PyCharm使用之配置SSH Interpreter的方法步骤
2019/12/26 Python
深入了解Python 方法之类方法 &amp; 静态方法
2020/08/17 Python
Python+Appium实现自动化清理微信僵尸好友的方法
2021/02/04 Python
浅谈HTML5 FileReader分布读取文件以及其方法简介
2017/11/09 HTML / CSS
ProBikeKit德国:在线公路自行车专家
2018/06/03 全球购物
阿迪达斯希腊官方网上商店:adidas希腊
2019/04/06 全球购物
三好学生自我鉴定
2013/12/17 职场文书
员工培训邀请函
2014/01/11 职场文书
竞选班干部演讲稿500字
2014/08/20 职场文书
五心教育心得体会
2014/09/04 职场文书
2014年车间工作总结
2014/11/21 职场文书
党员干部廉政承诺书
2015/04/28 职场文书
委托书范本格式
2019/04/18 职场文书
2019年七夕情人节浪漫祝福语大全!
2019/08/08 职场文书
php随机生成验证码,php随机生成数字,php随机生成数字加字母!
2021/04/01 PHP
mysql中如何用命令创建联合唯一索引
2022/04/20 MySQL