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 内置字符串处理函数的使用方法
Jun 11 Python
盘点提高 Python 代码效率的方法
Jul 03 Python
Python3实现生成随机密码的方法
Aug 23 Python
在Python中操作文件之read()方法的使用教程
May 24 Python
Java及python正则表达式详解
Dec 27 Python
python用fsolve、leastsq对非线性方程组求解
Dec 15 Python
对Python w和w+权限的区别详解
Jan 23 Python
python文件绝对路径写法介绍(windows)
Dec 25 Python
django修改models重建数据库的操作
Mar 31 Python
Python的in,is和id函数代码实例
Apr 18 Python
Pycharm自带Git实现版本管理的方法步骤
Sep 18 Python
python利用paramiko实现交换机巡检的示例
Sep 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获取远程图片并把它保存到本地的代码
2008/04/07 PHP
php中session过期时间设置及session回收机制介绍
2014/05/05 PHP
Codeigniter购物车类不能添加中文的解决方法
2014/11/29 PHP
PHP制作万年历
2015/01/07 PHP
PHPCMS V9 添加二级导航的思路详解
2016/10/20 PHP
javascript history对象(历史记录)使用方法(实现浏览器前进后退)
2014/01/07 Javascript
兼容Firefox的Javascript XSLT 处理XML文件
2014/12/31 Javascript
jQuery实现当前页面标签高亮显示的方法
2015/03/10 Javascript
浅析javascript函数表达式
2016/02/10 Javascript
AngularJS通过$sce输出html的方法
2016/09/22 Javascript
JavaScript原生节点操作小结
2017/01/17 Javascript
求js数组的最大值和最小值的四种方法
2017/03/03 Javascript
JS对象与JSON互转换、New Function()、 forEach()、DOM事件流等js开发基础小结
2017/08/10 Javascript
在微信小程序里使用watch和computed的方法
2018/08/02 Javascript
微信小程序如何修改本地缓存key中单个数据的详解
2019/04/26 Javascript
JavaScript cookie原理及使用实例
2020/05/08 Javascript
python+mysql实现简单的web程序
2014/09/11 Python
对Python中实现两个数的值交换的集中方法详解
2019/01/11 Python
Python实现插入排序和选择排序的方法
2019/05/12 Python
Python 20行简单实现有道在线翻译的详解
2019/05/15 Python
Python跳出多重循环的方法示例
2019/07/03 Python
Python读取xlsx文件的实现方法
2019/07/04 Python
python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法
2019/07/04 Python
python中利用numpy.array()实现俩个数值列表的对应相加方法
2019/08/26 Python
python中的数组赋值与拷贝的区别详解
2019/11/26 Python
CSS3+JavaScript实现炫酷呼吸效果的示例代码
2020/06/15 HTML / CSS
施华洛世奇美国官网:SWAROVSKI美国
2018/02/08 全球购物
联想韩国官网:Lenovo Korea
2018/05/10 全球购物
简单介绍Object类的功能、常用方法
2013/10/02 面试题
电气工程及其自动化学生实习自我鉴定
2013/09/19 职场文书
影子教师研修方案
2014/06/14 职场文书
班级学雷锋活动总结
2014/06/26 职场文书
学校开学标语
2014/10/06 职场文书
护理专业自我评价
2015/03/11 职场文书
2015年药房工作总结
2015/04/25 职场文书
高考1977观后感
2015/06/04 职场文书