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 21 Python
Python使用正则表达式实现文本替换的方法
Apr 18 Python
python生成式的send()方法(详解)
May 08 Python
Python重新加载模块的实现方法
Oct 16 Python
Python 调用 zabbix api的方法示例
Jan 06 Python
python实现抖音点赞功能
Apr 07 Python
如何用Python来理一理红楼梦里的那些关系
Aug 14 Python
Python列表list常用内建函数实例小结
Oct 22 Python
pycharm显示远程图片的实现
Nov 04 Python
tensorflow实现残差网络方式(mnist数据集)
May 26 Python
OpenCV+Python3.5 简易手势识别的实现
Dec 21 Python
Python中的变量与常量
Nov 11 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下关于中英数字混排的字符串分割问题
2010/04/06 PHP
PHP导航下拉菜单的实现如此简单
2013/09/22 PHP
php Calender(日历)代码分享
2014/01/03 PHP
PHP列出MySQL中所有数据库的方法
2015/03/12 PHP
PHP自动补全表单的两种方法
2017/03/06 PHP
Javascript实例教程(19) 使用HoTMetal(7)
2006/12/23 Javascript
Extjs显示从数据库取出时间转换JSON后的出现问题
2012/11/20 Javascript
extjs3 combobox取value和text案例详解
2013/02/06 Javascript
js中class的点击事件没有效果的解决方法
2016/10/13 Javascript
bootstrap datetimepicker日期插件使用方法
2017/01/13 Javascript
Vue formData实现图片上传
2019/08/20 Javascript
浅谈VUE中演示v-for为什么要加key
2020/01/16 Javascript
Javascript原生ajax请求代码实例
2020/02/20 Javascript
Python中运算符&quot;==&quot;和&quot;is&quot;的详解
2016/10/08 Python
Python3.6简单操作Mysql数据库
2017/09/12 Python
Python英文文本分词(无空格)模块wordninja的使用实例
2019/02/20 Python
Python 使用 PyMysql、DBUtils 创建连接池提升性能
2019/08/14 Python
python 动态调用函数实例解析
2019/10/21 Python
使用python快速在局域网内搭建http传输文件服务的方法
2019/11/14 Python
Python类中的装饰器在当前类中的声明与调用详解
2020/04/15 Python
Python中常见的数制转换有哪些
2020/05/27 Python
keras.utils.to_categorical和one hot格式解析
2020/07/02 Python
Python使用windows设置定时执行脚本
2020/11/12 Python
Python用SSH连接到网络设备
2021/02/18 Python
使用CSS3的ruby-position固定注音位置的用法示例
2016/07/05 HTML / CSS
仿CSDN Blog返回页面顶部功能实现原理及代码
2013/06/30 HTML / CSS
MADE法国:提供原创设计师家具
2018/09/18 全球购物
名人演讲稿范文
2013/12/28 职场文书
大学生未来职业生涯规划书
2014/02/15 职场文书
大学国际贸易专业自荐信
2014/06/05 职场文书
我的中国梦演讲稿600字
2014/08/19 职场文书
沈阳故宫导游词
2015/01/31 职场文书
辞职信怎么写
2015/02/27 职场文书
我的兄弟姐妹观后感
2015/06/15 职场文书
少先队中队工作总结2015
2015/07/23 职场文书
一文了解MYSQL三大范式和表约束
2022/04/03 MySQL