Linux shell查询ip归属地
起因
有的时候写脚本需要能够在脚本中获取到ip的归属地,比如分析登录日志列出攻击者的相关信息等。
可以使用whois来查询ip的详细信息,但是whois并不是每台机器预装的,而且我想看中文的结果,所以找到了一个个人认为设计的很棒的网站:https://ip.cn/index.php。
可以直接使用curl发请求查询,比如查某个攻击者的ip归属地:

哈,这就是我认为它设计的很棒的原因,同一个地址,用网页打开是一个效果,在命令行下请求返回结果又是另一个效果,命令行的返回结果很简洁,用过curl请求网页字段的人大概能理解最不爽的就是抽取结果,一个是麻烦,另一个是白白传了那么多内容都得过滤掉很浪费。
网站原理
我就在想啊这么酷的效果他是怎么做的,我没看过它的源码,但我猜测它是对User-Agent进行了相关处理,当判断到curl的User-Agent时就返回简洁的结果,使用-v选项可以查看curl的请求过程,来观察一下curl默认的User-Agent:
其实可以证明一下,只要指定了其它的User-Agent返回一大堆HTML那就可以推断确实是按照User-Agent like curl这种规则进行判断的:

得出结论,这个网站会判断请求头的User-Agent,如果发现是curl之类的命令行工具发出的请求就返回简洁的结果,否则认为是正常的浏览器返回HTML结果,酷。
封装
网址肯定记不住,每次打也麻烦,可以封装一下,vim ip-where.sh:
#! /bin/bash
# curl foobar https://ip.cn/index.php?ip={ip_address}
for ip in $@; do
curl https://ip.cn/index.php?ip=$ip
done
增加可执行权限:
chmod u+x ip-where.sh
并将此文件放到$PATH,我这里因为用到CentOS所以直接放到~/bin下面即可:
mv ip-where.sh ~/bin/
效果:

接口请求频率测试
突然想看下这个对请求次数有没有限制,于是便写了个小脚本每50毫秒随机生成一个ip去请求看看会发生什么事。
脚本:
#! /bin/bash
# curl foobar https://ip.cn/index.php?ip={ip_address}
for ((i=0;i<1000;i++)); do
curl https://ip.cn/index.php?ip=$((RANDOM%255+1)).$((RANDOM%255+1)).$((RANDOM%255+1)).$((RANDOM%255+1)) &
sleep 0.05
done
wait
echo "Done"
执行:

看来对频率没有限制,但是过快的话会有部分请求失败:

Linux shell查询ip归属地的更多相关文章
- [Ubuntu] geoip-bin 程序包 - 查询 IP 归属地
简述:在Linux命令行下查询IP归属地. 对Ubuntu/Debian系统,使用APT命令进行安装: $ sudo apt-get install geoip-bin 该包由MaxMind提供,它同 ...
- 任何快速查询IP归属地
最近公司项目需要做一个IP归属地查询的功能,想着如果用现成的API就可以大大提高开发效率,所以在网上的API商店搜索了一番,发现了 APISpace,它里面的IP归属地API非常符合我的开发需求. ...
- 利用纯真ip地址库 查询 ip所属地
1. 首先下周数据源,选择是纯真数据库:http://www.cz88.net/ 2. 安装后,打开软件,将数据导出为txt格式. 3. 处理数据,参照网上的文章(http://www.jb51.ne ...
- jquery 查询IP归属地
<script src="http://c.csdnimg.cn/public/common/libs/jquery/jquery-1.9.1.min.js" type=&q ...
- linux shell查询
查看当前版本可用的shell cat /etc/shells 查看当前使用的shell echo $0 查看当前用户默认使用的shell echo $SHELL
- python 利用cip.cc查询IP归属地
def ipinfocip(ip): # 获得 输入框中的信息 url = "http://www.cip.cc/%s" % ip # 模拟浏览器请求网络 headers={'Us ...
- python 利用淘宝IP库 查询IP归属地
#coding:utf-8 from django.test import TestCase import json import urllib ip = "114.114.114.114& ...
- 根据ip查询ip归属地
http://www.oschina.net/code/snippet_944819_33978 http://www.jb51.net/article/54287.htm public String ...
- python 通过线上API查询ip归属地
API为国外API,频率限制1分钟45个ip 脚本如下 1 #!/usr/bin/env python3 2 #-*-coding:utf-8-*- 3 4 import requests,re,js ...
随机推荐
- 这次彻底理解了Object这个属性
1.实例化Object对象 实例化Object对象的方式有两种:使用Object构造器和使用对象的字面量.例如: var person1 = { name: '李四' }; var person2 = ...
- Linux:日期用法,及格式定义
在shell脚本中经常会需要获取当前日期的地方,linux的系统时间在shell里是可以直接调用系统变量: 获取今天时期---`date +%Y%m%d` 或 `date +%F` 或 $(date ...
- flask开发表单
from flask import Flask from flask import render_template from flask import request from flask impor ...
- 基于 MySQL 的数据库实践(自然连接)
在基本查询一节的示例中,我们有从 instructor 和 teaches 表组合信息,匹配条件是 instructor.ID 等于 teaches.ID 的查询,ID 属性是两个表中具有相同名称的所 ...
- zookeeper初探
安装三台linux虚拟机,安装好java环境,并配置好网络以及host文件,分别改好hostname为node0.node1.node2 上传下载好的zookeeper文件到node0的/usr/lo ...
- 知物由学 | 基于DNN的人脸识别中的反欺骗机制
"知物由学"是网易云易盾打造的一个品牌栏目,词语出自汉·王充<论衡·实知>.人,能力有高下之分,学习才知道事物的道理,而后才有智慧,不去求问就不会知道."知物 ...
- MSSQL 复制数据 并随机打乱写入
select * into temp from XX order by newid() -- 复制表结构 truncate table XX -- 清空表 SET IDENTITY_INSERT XX ...
- 最新的Windows环境搭建zeroMQ并使用java代码运行zeromq详细教程
最近项目要用zeromq,linux上很好配置使用,但是windows上配置与使用没有找到合适的解决方案,看的很头疼,这里自己总结下供大家参考 准备工作: 1.libzmq下载地址:https://g ...
- 最快的3x3中值模糊
10.1国庆后,知名博主:laviewpbt http://www.cnblogs.com/Imageshop/ 发起了一个优化3x3中值模糊的小活动. 俺也参加其中,今天博主laviewpbt ...
- [HNOI2015]菜肴制作
题目描述 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予1到N的顺序编号,预估质量最高的菜肴编号为1. 由于菜肴 ...