python 判断内网IP方法及实例应用
一、初衷:
一般在CMDB里会存储一台服务器的内网IP、管理IP、电信IP、联通IP,我们在使用的时候只需要拿到其中一个外网IP地址即可。那么我们就需要判断内网IP、管理IP并剔除掉,获取第一个外网IP。
例如三线机房服务器:10.20.0.111(内网IP),221.222.222.33, 8.8.8.8, 1114.114.144.114, 10.20.1.100(管理IP)
二、原理代码:
内网IP可分为三类:
- A类地址:10.0.0.0--10.255.255.255
- B类地址:172.16.0.0--172.31.255.255
- C类地址:192.168.0.0--192.168.255.255
def ip_into_int(ip):
# 先把 192.168.1.13 变成16进制的 c0.a8.01.0d ,再去了“.”后转成10进制的 3232235789 即可。
# (((((192 * 256) + 168) * 256) + 1) * 256) + 13
return reduce(lambda x,y:(x<<8)+y,map(int,ip.split('.'))) def is_internal_ip(ip):
ip = ip_into_int(ip)
net_a = ip_into_int('10.255.255.255') >> 24
net_b = ip_into_int('172.31.255.255') >> 20
net_c = ip_into_int('192.168.255.255') >> 16
return ip >> 24 == net_a or ip >>20 == net_b or ip >> 16 == net_c if __name__ == '__main__':
ip = '192.168.0.1'
print ip, is_internal_ip(ip)
ip = '10.2.0.1'
print ip, is_internal_ip(ip)
ip = '172.16.1.1'
print ip, is_internal_ip(ip)
运行结果:
[root@ ubuntu]$ python p.py
192.168.0.1 True
10.2.0.1 True
172.16.1.1 True
>>> map(int, '12.34'.split('.'))
[12, 34]
>>> reduce(lambda x,y:(x<<8)+y, [12, 34])
3106
# 左移8位,相当于乘以256
>>> 12 * 256 + 34
3106
三、实例
#!/usr/bin/python
#-*-coding:utf8-*- vid = []
real_host = {} #判断内网IP
def ip_into_int(ip):
return reduce(lambda x,y:(x<<8)+y,map(int,ip.split('.'))) def is_internal_ip(ip):
ip = ip_into_int(ip)
net_a = ip_into_int('10.255.255.255') >> 24
net_b = ip_into_int('172.31.255.255') >> 20
net_c = ip_into_int('192.168.255.255') >> 16
return ip >> 24 == net_a or ip >>20 == net_b or ip >> 16 == net_c ef get_ips(vid): t = len(vid)
for i in range(t):
host_ip = []
ips_url = 'http://www.google.com/IP.do?versionId=%d ' % vid[i]
ips =urllib2.urlopen(ips_url)
ips_json = json.loads(ips.read()) t2 = len(ips_json['object'])
for k in range(t2):
flag = 0
ip_list = ips_json['object'][k].split(',') t3 =len(ip_list)
for m in range(t3):
if flag ==0 and is_internal_ip(ip_list[m]) == False:
host_ip.append(ip_list[m])
flag = 1 real_host[vid[i]] = host_ip ips.close()
return real_host
python 判断内网IP方法及实例应用的更多相关文章
- Python判断内网IP
def ip_into_int(ip): # 先把 192.168.1.13 变成16进制的 c0.a8.01.0d ,再去了"."后转成10进制的 3232235789 即可. ...
- Python获取内网IP
Python 获取本机内网IP 本文记录使用Python获取本机IP的两种方法. 通过hostname来获取本机IP import socket print(socket.gethostbyname( ...
- php获取代理服务器真实内网IP方法
功能:获取用户真实IP地址,代理服务器内网IP,防HTTP_CDN_FORWARDED_FOR注入 function getIP() { if (isset($_SERVER["HTTP_ ...
- Nginx 反向代理,流量转发到固定内网 IP 方法
主配置文件: user nginx; worker_processes ; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pi ...
- 判断内网机器的真实外网IP或域名的方法总结
在内渗透中有时需要在某台WEB服务器中留下后门,可以通过内网IP建立IPC连接,但还需要获知外网IP才能访问Wbshell,在无网关权限的情况下,我总结了有如下方法: nslookup myip.op ...
- 通过js获取内网ip和外网ip的简单方法 ...
今天遇到了一个需求,需要获取用户当前的内网ip, 找了半天终于找到了方法,遂将找到的方法记录下来,留给需要的人. 1,获取内网ip function getIP(callback) { let rec ...
- 如何判断自己IP是内网IP还是外网IP
tcp/ip协议中,专门保留了三个IP地址区域作为私有地址,其地址范围如下: 10.0.0.0/8:10.0.0.0-10.255.255.255 172.16.0.0/12:172.16.0.0- ...
- JAVA判断IP是否是内网IP
/** * 私有IP: * A类 10.0.0.0-10.255.255.255 * B类 172.16.0.0-172.31.255.255 * C类 192.168.0.0-192. ...
- Dubbo_异常_Service启动时默认将方法注册到内网IP
一.背景 一般Dubbo服务都是通过内网调用,Dubbo服务启动时默认会将服务注册到内网IP,消费端就无法从外网访问. 二.解决过程 1.Linux的hosts中设置外网IP a) 通过hostnam ...
随机推荐
- 《苹果开发之Cocoa编程》挑战2 创建一个数据源 练习
<苹果开发之Cocoa编程>第4版 P87 创建一个to-do list应用程序,在文本框中输入任务.当用户单击Add按钮时,添加字符串到一个变长队列,新任务就出现在list的末尾. 关键 ...
- C++面向对象要点
先说说面向对象思想的一个总体认识 对象通常会有行为,这些行为是靠信息支撑,这些信息包括外部信息和内部信息,对象行为会维护其中的一部分信息 因此对象可以看成是这样一种实体,它获取信息,然后决定自己的行为 ...
- RxJava + Retrofit 的实际应用场景
关于 RxJava Retrofit 很多篇文章都有详细的说明,在这里我想分享一个具体的使用案例,在我的开源项目 就看天气 里的实际应用.也希望跟大家探讨如何优雅的使用. 准备 项目中用到的依赖: c ...
- 内网渗透中的反弹Shell与端口转发
from:https://www.91ri.org/9367.html Web渗透中的反弹Shell与端口转发 php需未禁用exec函数一:生成php反弹脚本msf > msfpayload ...
- 在Hyper-V虚拟机中使用Wi-Fi上网
笔记本配置了一块以太网卡和一块无线网卡.由于平时常用Wi-Fi上网,偶然发现Hyper-V虚拟机默认不能使用宿主系统的无线网卡上网,据说是出于安全方面的考虑.后来参考"Using Wirel ...
- P1003 越野跑【tyvj】
/*=========================================================== P1003 越野跑 描述 Description 为了能在下一次跑步比赛中有 ...
- OpenJudge计算概论-字符串排序
/*====================================================================== 字符串排序 总时间限制: 1000ms 内存限制: 6 ...
- 【转】HTML - embed 与 object 之争
在 HTML 里嵌入文本和图片之外的事物,就会用到嵌入标签,而嵌入标签在各浏览器之间的不统一,一直是让开发人员很头痛的问题.一切都要从嵌入 SUN 公司的 Applet Java 小程序开始. 当时, ...
- 文件/文件夹比较工具 beyond compare 3.3.10
- 结合MongoDB开发LBS应用
然后列举一下需求:1.实时性要高,有频繁的更新和读取2.可按距离排序支持分页3.支持多条件筛选(一个经纬度数据还包含其他属性,比如社交系统的性别.年龄) 方案简单介绍:1.sphinx geo索引支持 ...