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开发vim插件及心得分享
Nov 04 Python
python开发之IDEL(Python GUI)的使用方法图文详解
Nov 12 Python
Collatz 序列、逗号代码、字符图网格实例
Jun 22 Python
Python判断是否json是否包含一个key的方法
Dec 31 Python
对Django项目中的ORM映射与模糊查询的使用详解
Jul 18 Python
python框架flask表单实现详解
Nov 04 Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
Dec 04 Python
python isinstance函数用法详解
Feb 13 Python
python 爬虫 实现增量去重和定时爬取实例
Feb 28 Python
Python切割图片成九宫格的示例代码
Mar 10 Python
python thrift 实现 单端口多服务的过程
Jun 08 Python
小结Python的反射机制
Sep 28 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中copy on write写时复制机制介绍
2014/05/13 PHP
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
2015/10/20 PHP
[原创]php正则删除html代码中class样式属性的方法
2017/05/24 PHP
laravel自定义分页效果
2017/07/23 PHP
jquery实现点击消失的代码
2014/03/03 Javascript
jQuery中wrapInner()方法用法实例
2015/01/16 Javascript
jQuery支持动态参数将函数绑定到事件上的方法
2015/03/17 Javascript
text-align:justify实现文本两端对齐 兼容IE
2015/08/19 Javascript
JavaScript和HTML DOM的区别与联系及Javascript和DOM的关系
2015/11/15 Javascript
[原创]jQuery常用的4种加载方式分析
2016/07/25 Javascript
AngularJS基础 ng-mouseover 指令简单示例
2016/08/02 Javascript
微信小程序 Audio API详解及实例代码
2016/09/30 Javascript
JavaScript 控制字体大小设置的方法
2016/11/23 Javascript
JavaScript实现的商品抢购倒计时功能示例
2017/04/17 Javascript
详解Angular 4.x Injector
2017/05/04 Javascript
jQuery动态追加页面数据以及事件委托详解
2017/05/06 jQuery
基于js粘贴事件paste简单解析以及遇到的坑
2017/09/07 Javascript
原生JS实现九宫格抽奖
2020/09/13 Javascript
一文秒懂nodejs中的异步编程
2021/01/28 NodeJs
[57:37]EG vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
在python中的socket模块使用代理实例
2014/05/29 Python
跟老齐学Python之让人欢喜让人忧的迭代
2014/10/02 Python
利用Python的Twisted框架实现webshell密码扫描器的教程
2015/04/16 Python
python可视化实现KNN算法
2019/10/16 Python
python语言实现贪吃蛇游戏
2020/11/13 Python
移动web模拟客户端实现多方框输入密码效果【附代码】
2016/03/25 HTML / CSS
详解h5页面在不同ios设备上的问题总结
2019/03/01 HTML / CSS
匈牙利超级网上商店和优惠:Alza.hu
2019/12/17 全球购物
乌克兰网上珠宝商店:GoldSoveren
2020/03/31 全球购物
自我评价个人范文
2013/12/16 职场文书
法院先进个人事迹材料
2014/05/04 职场文书
入党积极分子自我批评思想汇报
2014/10/10 职场文书
2015年学校关工委工作总结
2015/04/03 职场文书
如何用JS实现网页瀑布流布局
2021/04/24 Javascript
Python列表删除重复元素与图像相似度判断及删除实例代码
2021/05/07 Python
Django框架之路由用法
2022/06/10 Python