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中isnumeric()方法的使用简介
May 19 Python
对比Python中__getattr__和 __getattribute__获取属性的用法
Jun 21 Python
Python的网络编程库Gevent的安装及使用技巧
Jun 24 Python
Python中shutil模块的学习笔记教程
Apr 04 Python
关于Python如何避免循环导入问题详解
Sep 14 Python
Python实现压缩和解压缩ZIP文件的方法分析
Sep 28 Python
Python3.6实现连接mysql或mariadb的方法分析
May 18 Python
matplotlib.pyplot画图 图片的二进制流的获取方法
May 24 Python
Python读取数据集并消除数据中的空行方法
Jul 12 Python
Python 互换字典的键值对实例
Feb 12 Python
使用Python和百度语音识别生成视频字幕的实现
Apr 09 Python
改变 Python 中线程执行顺序的方法
Sep 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
PHP 和 MySQL 基础教程(二)
2006/10/09 PHP
Linux下快速搭建php开发环境
2017/03/13 PHP
php文件包含目录配置open_basedir的使用与性能详解
2017/04/03 PHP
jQuery 删除或是清空某个HTML元素示例
2014/08/04 Javascript
js父页面与子页面不同时显示的方法
2014/10/16 Javascript
JavaScript中window.open用法实例详解
2015/04/15 Javascript
jQuery实现有动画淡出效果的二级折叠菜单代码
2015/10/17 Javascript
jQuery弹簧插件编写基础之“又见弹窗”
2015/12/11 Javascript
JavaScript匿名函数之模仿块级作用域
2015/12/12 Javascript
JQuery动态添加Select的Option元素实现方法
2016/08/29 Javascript
简单实现bootstrap导航效果
2017/02/07 Javascript
jQuery Ajax全解析
2017/02/13 Javascript
python使用递归解决全排列数字示例
2014/02/11 Python
Python中DJANGO简单测试实例
2015/05/11 Python
Python入门之modf()方法的使用
2015/05/15 Python
python3解析库pyquery的深入讲解
2018/06/26 Python
Python不使用int()函数把字符串转换为数字的方法
2018/07/09 Python
Python实现常见的回文字符串算法
2018/11/14 Python
python将txt等文件中的数据读为numpy数组的方法
2018/12/22 Python
Python从单元素字典中获取key和value的实例
2018/12/31 Python
django解决跨域请求的问题详解
2019/01/20 Python
python内存监控工具memory_profiler和guppy的用法详解
2019/07/29 Python
python实现人像动漫化的示例代码
2020/05/17 Python
Python爬虫之Selenium多窗口切换的实现
2020/12/04 Python
使用Python下载抖音各大V视频的思路详解
2021/02/06 Python
您的健身减肥和健康饮食专家:vitafy
2017/06/06 全球购物
西班牙宠物用品和食品网上商店:Tiendanimal
2019/06/06 全球购物
视光学毕业生自荐书范文
2014/02/13 职场文书
党员干部2014全国两会学习心得体会
2014/03/10 职场文书
预备党员学习十八届三中全会精神思想汇报
2014/09/13 职场文书
小学老师对学生的评语
2014/12/29 职场文书
保卫工作个人总结
2015/03/03 职场文书
中秋晚会致辞
2015/07/31 职场文书
2016年小学推普宣传周活动总结
2016/04/06 职场文书
《围炉夜话》110句人生箴言,精辟有内涵,引人深思
2019/10/23 职场文书
jquery插件实现搜索历史
2021/04/24 jQuery