起因

有的时候写脚本需要能够在脚本中获取到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归属地的更多相关文章

  1. [Ubuntu] geoip-bin 程序包 - 查询 IP 归属地

    简述:在Linux命令行下查询IP归属地. 对Ubuntu/Debian系统,使用APT命令进行安装: $ sudo apt-get install geoip-bin 该包由MaxMind提供,它同 ...

  2. 任何快速查询IP归属地

    最近公司项目需要做一个IP归属地查询的功能,想着如果用现成的API就可以大大提高开发效率,所以在网上的API商店搜索了一番,发现了 APISpace,它里面的IP归属地API非常符合我的开发需求.   ...

  3. 利用纯真ip地址库 查询 ip所属地

    1. 首先下周数据源,选择是纯真数据库:http://www.cz88.net/ 2. 安装后,打开软件,将数据导出为txt格式. 3. 处理数据,参照网上的文章(http://www.jb51.ne ...

  4. jquery 查询IP归属地

    <script src="http://c.csdnimg.cn/public/common/libs/jquery/jquery-1.9.1.min.js" type=&q ...

  5. linux shell查询

    查看当前版本可用的shell cat /etc/shells 查看当前使用的shell echo $0 查看当前用户默认使用的shell echo $SHELL

  6. python 利用cip.cc查询IP归属地

    def ipinfocip(ip): # 获得 输入框中的信息 url = "http://www.cip.cc/%s" % ip # 模拟浏览器请求网络 headers={'Us ...

  7. python 利用淘宝IP库 查询IP归属地

    #coding:utf-8 from django.test import TestCase import json import urllib ip = "114.114.114.114& ...

  8. 根据ip查询ip归属地

    http://www.oschina.net/code/snippet_944819_33978 http://www.jb51.net/article/54287.htm public String ...

  9. python 通过线上API查询ip归属地

    API为国外API,频率限制1分钟45个ip 脚本如下 1 #!/usr/bin/env python3 2 #-*-coding:utf-8-*- 3 4 import requests,re,js ...

随机推荐

  1. 关于tr069网管开发系列教程

    原创作品,转载请注明出处,严禁非法转载.如有错误,请留言! email:40879506@qq.com 声明:本系列涉及的开源程序代码学习和研究,严禁用于商业目的. 如有任何问题,欢迎和我交流.(企鹅 ...

  2. 拿来主义:layPage分页插件的使用

    布衣之谈 所谓插件,大概就是项目中可插可拔的比较小功能化的组件:这些功能组件若能力可及,自己也可以完成——也即自己造轮子,但翻看各种技术社区,相关领域的神人们往往会有更好的实现方案贡献出来,这个时候你 ...

  3. QT-第一个程序 Hello QT , 以及QT creator介绍

    第一个程序 - Hello QT 首先写main.cpp: #include <QApplication> #include <QMainWindow> #include &l ...

  4. MyBatis(2)——MyBatis 深入学习

    编写日志输出环境配置文件 在开发过程中,最重要的就是在控制台查看程序输出的日志信息,在这里我们选择使用 log4j 工具来输出: 准备工作: 将[MyBatis]文件夹下[lib]中的 log4j 开 ...

  5. [LeetCode] Number of Atoms 原子的个数

    Given a chemical formula (given as a string), return the count of each atom. An atomic element alway ...

  6. java面试2(java技术栈和Hollis面试内容分享)

    1.什么是java虚拟机? java虚拟机(JVM)是一个可执行java字节码的虚拟机进程,java源文件被编译成能被java虚拟机可执行的字节码文件. 2.什么是平台无关性,java是如何做到平台无 ...

  7. webpack模块化管理和打包工具

    Webpack简介 webpack是当下最热门的前端资源模块化管理和打包工具.它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源.还可以将按需加载的模块进行代码分隔,等到实际 需要的 ...

  8. Discuz! 7.x 反射型xss

    引用:http://wooyun.jozxing.cc/static/bugs/wooyun-2014-084097.html 在/include/global.func.php 文件中 第1036- ...

  9. [SCOI2008]配对

    题目描述 你有 n 个整数Ai和n 个整数Bi.你需要把它们配对,即每个Ai恰好对应一个Bp[i].要求所有配对的整数差的绝对值之和尽量小,但不允许两个相同的数配对.例如A={5,6,8},B={5, ...

  10. 洛谷P3233 [HNOI2014]世界树

    虚树= = #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring&g ...