起因

有的时候写脚本需要能够在脚本中获取到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. oracle中求1到100之间的质数和

    declare i number:=1; j number:=0; sum1 number:=0;begin while(i<100) loop i:=i+1; j:=2; while(mod( ...

  2. tar命令-vi编辑器-磁盘分区及格式化-软链接及硬链接文件

    一.tar命令 1.将用户信息数据库文件和组信息数据库文件纵向合并为一个文件/1.txt(覆盖) [root@localhost  /] #  cat  /etc/passwd  /etc/group ...

  3. 移动端,input输入框被手机输入法解决方案

    当界面元素靠下时候的时候,input输入框会被系统的键盘遮挡. 我们可以让界面向上移动一定距离去避免遮挡. $('#money').click(function(){ setTimeout(funct ...

  4. [转]linux查看日志文件内容命令

    linux查看日志文件内容命令tail.cat.tac.head.echo tail -f test.log你会看到屏幕不断有内容被打印出来. 这时候中断第一个进程Ctrl-C, ---------- ...

  5. 算法题丨Next Permutation

    描述 Implement next permutation, which rearranges numbers into the lexicographically next greater perm ...

  6. [LeetCode] Cut Off Trees for Golf Event 为高尔夫赛事砍树

    You are asked to cut off trees in a forest for a golf event. The forest is represented as a non-nega ...

  7. [LeetCode] Minimum Absolute Difference in BST 二叉搜索树的最小绝对差

    Given a binary search tree with non-negative values, find the minimum absolute difference between va ...

  8. C++11 作用域内枚举

    enum class MyEnum{ P1 = , P2, P3, P4, P5 }; MyEnum myEnum = MyEnum::P2; 使用作用域的方式获取并限定P2的值.之所以要使用作用域, ...

  9. Java入门之JDK的安装和环境变量的配置

    Java的版本 1. Java SEjava se 以前称为J2SE.它允许开发和部署在桌面.服务器.嵌入式环境和实时环境中使用的 Java 应用程序.Java SE是基础包,但是也包含了支持 Jav ...

  10. Kylin系列之二:原理介绍

    Kylin系列之二:原理介绍 2018年4月15日 15:52 因何而生 Kylin和hive的区别 1. hive主要是离线分析平台,适用于已经有成熟的报表体系,每天只要定时运行即可. 2. Kyl ...