起因

有的时候写脚本需要能够在脚本中获取到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. tornado解决高并发的初步认识牵扯出的一些问题

    #!/bin/env python # -*- coding:utf-8 -*- import tornado.httpserver import tornado.ioloop import torn ...

  2. Django小范围傻瓜总结

    1.母版: layout.html {% block x %}{% endblock %} 2.子版: {% extends 'layout' %} {% block x %}.......{% en ...

  3. MySQL 如何使用 PV 和 PVC?- 每天5分钟玩转 Docker 容器技术(154)

    本节演示如何为 MySQL 数据库提供持久化存储,步骤为: 创建 PV 和 PVC. 部署 MySQL. 向 MySQL 添加数据. 模拟节点宕机故障,Kubernetes 将 MySQL 自动迁移到 ...

  4. enumerate给列表加索引

    >>> list = ['a','b','c'] >>> for i,j in enumerate(list): print(i,j) 0 a 1 b 2 c &g ...

  5. Java集合框架的四个接口

    接口 [四个接口  collection  list  set  map 的区别] collection 存储不唯一的无序的数据 list 存储有序的不唯一的数据 set   存储无序的唯一的数据 m ...

  6. 部署上次的Hapi到Windows+Docker,WindowsDocker

    前言: 理论的就不多说了,具体的架构看图.web这里是上篇文章开发的Hapi服务,数据库Mysql,废话不多说,粗略的画了下,架构图如下: Mysql镜像拉取,配置 数据库镜像查找 docker se ...

  7. “百度杯”CTF比赛 九月场_YeserCMS

    题目在i春秋ctf大本营 题目的提示并没有什么卵用,打开链接发现其实是easycms,百度可以查到许多通用漏洞 这里我利用的是无限报错注入 访问url/celive/live/header.php,直 ...

  8. spring data jpa 组合条件查询封装

    /** * 定义一个查询条件容器 * @author lee * * @param <T> */ public class Criteria<T> implements Spe ...

  9. Mac下安装oh-my-zsh

    Mac下自带的终端并不好用,当你打开终端的时候是一个白花花的窗口,其实Mac自带几种shell,默认使用的是bash,可以通过 cat /etc/shells 查看几种shell bin/bash / ...

  10. [SDOI 2009]HH的项链

    Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝 壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此,他的项链变得 ...