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遍历某目录下的所有文件夹与文件路径
Mar 15 Python
致Python初学者 Anaconda入门使用指南完整版
Apr 05 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
Apr 09 Python
python字符串常用方法
Jun 14 Python
python通过ffmgep从视频中抽帧的方法
Dec 05 Python
Python中使用双下划线防止类属性被覆盖问题
Jun 27 Python
python中判断文件结束符的具体方法
Aug 04 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
Aug 07 Python
golang中的空接口使用详解
Mar 30 Python
有趣的二维码:使用MyQR和qrcode来制作二维码
May 10 Python
python在package下继续嵌套一个package
Apr 14 Python
python语言中pandas字符串分割str.split()函数
Aug 05 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
回答PHPCHINA上的几个问题:URL映射
2007/02/14 PHP
PHP统一页面编码避免乱码问题
2015/04/09 PHP
修改WordPress中文章编辑器的样式的方法详解
2015/12/15 PHP
[原创]php集成安装包wampserver修改密码后phpmyadmin无法登陆的解决方法
2016/11/23 PHP
Gird组件 Part-3:范例RSSFeed Viewer
2007/03/10 Javascript
用JavaScrpt实现文件夹简单轻松加密的实现方法图文
2008/09/08 Javascript
jquery的index方法实现tab效果
2011/02/16 Javascript
js 延迟加载 改变JS的位置加快网页加载速度
2012/12/11 Javascript
jquery获取特定name所有选中的checkbox,支持IE9标准模式
2013/03/18 Javascript
jquery datatable后台封装数据示例代码
2014/08/07 Javascript
黑帽seo劫持程序,js劫持搜索引擎代码
2015/09/15 Javascript
fastclick插件导致日期(input[type=&quot;date&quot;])控件无法被触发该如何解决
2015/11/09 Javascript
Angular.js中控制器之间的传值详解
2017/04/24 Javascript
详解nodejs通过代理(proxy)发送http请求(request)
2017/09/22 NodeJs
vue里面v-bind和Props 利用props绑定动态数据的方法
2018/08/27 Javascript
node+express框架中连接使用mysql(经验总结)
2018/11/10 Javascript
el-input 标签中密码的显示和隐藏功能的实例代码
2019/07/19 Javascript
JS获取动态添加元素的方法详解
2019/07/31 Javascript
vue用BMap百度地图实现即时搜索功能
2019/09/26 Javascript
微信小程序iOS下拉白屏晃动问题解决方案
2019/10/12 Javascript
[01:43]深扒TI7聊天轮盘语音出处4
2017/05/11 DOTA
[01:12]快闪回顾DOTA2亚洲邀请赛(DAC) 静候2018新征程开启
2018/03/11 DOTA
Python写的PHPMyAdmin暴力破解工具代码
2014/08/06 Python
python机器学习理论与实战(四)逻辑回归
2018/01/19 Python
Python FTP两个文件夹间的同步实例代码
2018/05/25 Python
Python编程flask使用页面模版的方法
2018/12/28 Python
Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】
2019/05/23 Python
flask 实现上传图片并缩放作为头像的例子
2020/01/09 Python
Python Dict找出value大于某值或key大于某值的所有项方式
2020/06/05 Python
英国虚拟主机服务商:eUKhost
2016/08/16 全球购物
德国机车企业:FC-Moto
2017/10/27 全球购物
激励员工的口号
2014/06/16 职场文书
农村党支部书记司法四风问题对照检查材料
2014/09/26 职场文书
劳资员岗位职责
2015/02/13 职场文书
2015教师个人年度工作总结
2015/10/23 职场文书
小学五年级班主任工作经验交流材料
2015/11/02 职场文书