ipLocate
iplocate 是一个为了方便在终端环境通过ip或者域名获取其物理地址而生的程序
整个程序其实只是一个简单的网页爬虫而已,数据来源为http://ipinfo.io/,本身并没有什么技术难点,本来还准备用国内的淘宝ip地址库来获取ip信息的,后来发现其实淘宝地址库中并没有太多关于ip来源具体位置的信息,就统一成了使用这个统一接口
这个程序的需求来自于曾经自己管理的服务器受到攻击,需要查明攻击者来源,判断其目的,当然首先判断攻击来源ip是否能访问,万一是肉鸡的话可能就需要联系对方网站管理员了,如果来源ip和来自同一个学校的话~~可能是学生们测试攻击手段或者同行的恶意攻击了,必要的话就需要屏蔽其ip了
安装
1 | $ sudo pip install iplocate |
兼容
*nix 操作系统
python 2.7
python 3.4
依赖
paramseeker
使用
1.获取本机ip及相关信息
1 | $ iplocate |
2.获取某ip信息
1 | $ iplocate 210.42.122.245 |
3.获取某域名对应信息(该域名ip为本机实时获取)
1 | $ iplocate www.baidu.com |
4.关于iplocate
1 | $ iplocate -v |
返回数据
可能得到下列类似结果
1 | 59.172.176.214 |
数据含义:
ip地址
经纬度
国家(缩写)
地区
城市
主机名
网络(AS号)
…
可能出现的其他值
postal(邮编)
phone(电话)
Github
IpLocate使用
这是一个内部封装的获取ip物理地址信息的类
1 | if sys.version_info.major == 2: |
用于兼容py2以及py3
1 | IpLocate.ip # 用于保存目标ip地址,ipv6或ipv4 |
ip
以及host
的设置可以在初始化时赋值,可以单独为其中一个值初始化,若同时初始化,默认使用ip
作为目标处理
1 | IpLocate().my_locate() # 获取执行程序的本机的ip数据,直接得到IpLocate.result |
1 | IpLocate().his_locate() # 获取指定ip或host的location信息 |
内部获取域名ip的方式,通过socket
(原本通过调用系统ping
命令来获取结果,但是后来放弃了,有一下原因)
- 虽然类unix系统的
ping
命令差不多,但是windows下面ping
参数些许不一样,比如设置timeout和ping多少次等,可以根据platform
使用不同的ping
参数,但是些许麻烦- 通过
ping
返回结果获取域名ip的话,需要用正则表达式’’’’\((.+?)\)’’’’,在测试过程中发现某些情况下执行regular.find_all()会出现死递归,可能和python中执行正则的方式有关,具体原因自己也没有深入调查,所以没有用ping
- 之所以使用
socket
来获取域名的ip
主要是因为方便,socket.gethostbyname(hostname)
会直接返回目标域名的ip地址,且方便设置timeout
引用
1 | from IpLocate import IpLocate |
以上为IpLocate
的核心部分,实际在终端使用程序时通过paramseeker
模块辅助实现,因为paramseeker
还有很多需要改进的地方,顾用比较简单的程序来测试,终端运行程序为run.py
本文作者 : hellflame
原文链接 : https://hellflame.github.io/2017/04/15/about-iplocate/
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!