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 许可协议。转载请注明出处!