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进阶教程之函数对象(函数也是对象)
Aug 30 Python
详解Python实现多进程异步事件驱动引擎
Aug 25 Python
Python2实现的LED大数字显示效果示例
Sep 04 Python
Python实现简单的HttpServer服务器示例
Sep 25 Python
windows下安装python的C扩展编译环境(解决Unable to find vcvarsall.bat)
Feb 21 Python
pygame游戏之旅 python和pygame安装教程
Nov 20 Python
python感知机实现代码
Jan 18 Python
Python中如何使用if语句处理列表实例代码
Feb 24 Python
如何基于python把文字图片写入word文档
Jul 31 Python
Django中使用Celery的方法步骤
Dec 07 Python
Python Django模型详解
Oct 05 Python
python 离散点图画法的实现
Apr 01 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分页显示制作详细讲解
2008/11/19 PHP
phpphp图片采集后按原路径保存图片示例
2014/02/18 PHP
php操作XML、读取数据和写入数据的实现代码
2014/08/15 PHP
js版本A*寻路算法
2006/12/22 Javascript
event.srcElement 用法笔记e.target
2009/12/18 Javascript
兼容IE和FF的js脚本代码小结(比较常用)
2010/12/06 Javascript
JavaScript实现网页上的浮动广告的简单方法
2013/06/14 Javascript
Ext JS添加子组件的误区探讨
2013/06/28 Javascript
Array栈方法和队列方法的特点说明
2014/01/24 Javascript
jquery处理json对象
2014/11/03 Javascript
再次谈论React.js实现原生js拖拽效果引起的一系列问题
2016/04/03 Javascript
浅析在javascript中创建对象的各种模式
2016/05/06 Javascript
js字符串截取函数slice、substring和substr的比较
2016/05/17 Javascript
jQuery多文件异步上传带进度条实例代码
2016/08/16 Javascript
jQuery设计思想
2017/03/07 Javascript
Jquery-data的三种用法
2017/04/18 jQuery
react-router实现跳转传值的方法示例
2017/05/27 Javascript
jQuery使用zTree插件实现可拖拽的树示例
2017/09/23 jQuery
微信小程序使用navigateTo数据传递的实例
2017/09/26 Javascript
Vue唯一可以更改vuex实例中state数据状态的属性对象Mutation的讲解
2019/01/18 Javascript
如何基于vue-cli3.0构建功能完善的移动端架子
2019/04/24 Javascript
Vue Element UI + OSS实现上传文件功能
2019/07/31 Javascript
Nest.js环境变量配置与序列化详解
2021/02/21 Javascript
Python实现扫描指定目录下的子目录及文件的方法
2014/07/16 Python
python如何实现excel数据添加到mongodb
2015/07/30 Python
ubuntu 18.04搭建python环境(pycharm+anaconda)
2019/06/14 Python
Python中list的交、并、差集获取方法示例
2019/08/01 Python
pytorch 输出中间层特征的实例
2019/08/17 Python
Python3实现二叉树的最大深度
2019/09/30 Python
windows中安装Python3.8.0的实现方法
2019/11/19 Python
利用Opencv实现图片的油画特效实例
2021/02/28 Python
Sarenza德国:法国最大的时尚鞋和包包网上商店
2019/06/08 全球购物
省优秀教师事迹材料
2014/01/30 职场文书
2014年学校办公室工作总结
2014/12/19 职场文书
公司周年庆典致辞
2015/07/30 职场文书
彻底卸载VMware虚拟机的超详细步骤记录
2022/07/15 Servers