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 Web服务器Tornado使用小结
May 06 Python
浅析Python中的序列化存储的方法
Apr 28 Python
python获取指定路径下所有指定后缀文件的方法
May 26 Python
Python读写及备份oracle数据库操作示例
May 17 Python
python3.6使用pickle序列化class的方法
Oct 22 Python
python画图系列之个性化显示x轴区段文字的实例
Dec 13 Python
深入解析神经网络从原理到实现
Jul 26 Python
python next()和iter()函数原理解析
Feb 07 Python
Python 中由 yield 实现异步操作
May 04 Python
python获取整个网页源码的方法
Aug 03 Python
python如何调用php文件中的函数详解
Dec 29 Python
Python使用tkinter制作在线翻译软件
Feb 22 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实现rc4加密算法代码
2012/04/25 PHP
深入探讨:PHP使用数据库永久连接方式操作MySQL的是与非
2013/06/05 PHP
PHP实现连接设备、通讯和发送命令的方法
2015/10/13 PHP
PHP进阶学习之Geo的地图定位算法详解
2019/06/19 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
2019/09/10 PHP
Laravel框架处理用户的请求操作详解
2019/12/20 PHP
基于jQuery的淡入淡出可自动切换的幻灯插件
2010/08/24 Javascript
JSON辅助格式化处理方法
2013/03/26 Javascript
详解微信小程序开发之——wx.showToast(OBJECT)的使用
2017/01/18 Javascript
js实现textarea限制输入字数
2017/02/13 Javascript
微信小程序中form 表单提交和取值实例详解
2017/04/20 Javascript
JS实现队列的先进先出功能示例
2017/05/10 Javascript
使用ef6创建oracle数据库的实体模型遇到的问题及解决方案
2017/11/09 Javascript
vue中datepicker的使用教程实例代码详解
2019/07/08 Javascript
JS实现长图上下滚动效果
2020/03/19 Javascript
ant design vue 表格table 默认勾选几项的操作
2020/10/31 Javascript
Python入门篇之列表和元组
2014/10/17 Python
Python使用urllib2模块实现断点续传下载的方法
2015/06/17 Python
利用python批量检查网站的可用性
2016/09/09 Python
python使用Tesseract库识别验证
2018/03/21 Python
python ChainMap的使用和说明详解
2019/06/11 Python
解决Django Static内容不能加载显示的问题
2019/07/28 Python
Python 脚本的三种执行方式小结
2019/12/21 Python
在Python中通过threshold创建mask方式
2020/02/19 Python
django 模型字段设置默认值代码
2020/07/15 Python
如何在python中实现线性回归
2020/08/10 Python
HTML5制作3D爱心动画教程 献给女友浪漫的礼物
2014/11/05 HTML / CSS
Champs Sports加拿大:北美最大的以商场为基础的专业运动鞋和服装零售商之一
2018/05/01 全球购物
自动一体化专业求职信
2014/03/15 职场文书
购房意向书
2014/08/30 职场文书
开展批评与自我批评发言材料
2014/10/17 职场文书
师德师风主题教育活动总结
2015/05/07 职场文书
处罚决定书范文
2015/06/24 职场文书
2019年励志签名:致拼搏路上的自己
2019/10/11 职场文书
Python按顺序遍历并读取文件夹中文件
2022/04/29 Python
Android Studio实现带三角函数对数运算功能的高级计算器
2022/05/20 Java/Android