python 判斷內網IP方法及例項應用

2022-09-17 20:24:22 字數 3321 閱讀 9223

一、初衷:

一般在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可分為三類:

區域網在選取使用私有位址時,一般會按照實際需要容納的主機數來選擇私有位址段。常見的區域網由於容量小,一般選擇c類的192.168.0.0作為位址段使用,一些大型企業就需要使用b類甚至a類位址段作為內部網路的位址段。

實現**:

1

defip_into_int(ip):2#

先把 192.168.1.13 變成16進製制的 c0.a8.01.0d ,再去了「.」後轉成10進製的 3232235789 即可。3#

(((((192 * 256) + 168) * 256) + 1) * 256) + 13

4return reduce(lambda x,y:(x<<8)+y,map(int,ip.split('.'

)))5

6def

is_internal_ip(ip):

7 ip =ip_into_int(ip)

8 net_a = ip_into_int('

10.255.255.255

') >> 24

9 net_b = ip_into_int('

172.31.255.255

') >> 20

10 net_c = ip_into_int('

192.168.255.255

') >> 16

11return ip >> 24 == net_a or ip >>20 == net_b or ip >> 16 ==net_c

1213

if__name__ == '

__main__':

14 ip = '

192.168.0.1'15

print

ip, is_internal_ip(ip)

16 ip = '

10.2.0.1'17

print

ip, is_internal_ip(ip)

18 ip = '

172.16.1.1'19

print ip, is_internal_ip(ip)

執行結果:

[root@ ubuntu]$ python p.py

192.168.0.1true

10.2.0.1true

172.16.1.1 true

其中map和reduce函式的用法介紹:

>>> map(int, '

12.34

'.split('.'

))[12, 34]

>>> reduce(lambda x,y:(x<<8)+y, [12, 34])

3106

#左移8位,相當於乘以256

>>> 12 * 256 + 34

3106

三、例項

1

#!/usr/bin/python2#

-*-coding:utf8-*-

34 vid =

5 real_host ={}67

#判斷內網ip

8def

ip_into_int(ip):

9return reduce(lambda x,y:(x<<8)+y,map(int,ip.split('.'

)))10

11def

is_internal_ip(ip):

12 ip =ip_into_int(ip)

13 net_a = ip_into_int('

10.255.255.255

') >> 24

14 net_b = ip_into_int('

172.31.255.255

') >> 20

15 net_c = ip_into_int('

192.168.255.255

') >> 16

16return ip >> 24 == net_a or ip >>20 == net_b or ip >> 16 ==net_c

1718

ef get_ips(vid):

1920 t =len(vid)

21for i in

range(t):

22 host_ip =

23 ips_url = '

' %vid[i]

24 ips =urllib2.urlopen(ips_url)

25 ips_json =json.loads(ips.read())

2627 t2 = len(ips_json['

object'])

28for k in

range(t2):

29 flag =0

30 ip_list = ips_json['

object

'][k].split(','

)3132 t3 =len(ip_list)

33for m in

range(t3):

34if flag ==0 and is_internal_ip(ip_list[m]) ==false:

3536 flag = 1

3738 real_host[vid[i]] =host_ip

3940

ips.close()

41return real_host

其中ip_list = [10.20.0.111, 221.222.222.33, 8.8.8.8, 1114.114.144.114, 10.20.1.100],通過迴圈依次取ip位址,判斷後存第乙個ip到host_ip。並設定flag =1 說明已取到此機器的外網ip,可以去下乙個機器的了。

內網IP段分類 判斷ip是否是內網ip

在公網 連internet的 是看不到這些ip的,使用這些ip一定是你在公司或學校內網中,比如公司路由下。這些私有位址在公司 組織 內網中,可重複出現在不同公司組織內部。比如你在公司內部的使用分配到的內網ip192.168.1.12和另一家公司的朋友qq聊天,碰巧他的內網ip也是192.168.1....

判斷機器IP是公網ip還是內網ip

首先是恭喜開通blog ip位址分為五類。e類為保留為今後使用,d類為組播位址。用於主機網路位址的就是a類 b類 c類了。10.0.0.0 8 10.0.0.0 10.255.255.255 172.16.0.0 12 172.16.0.0 172.31.255.255 192.168.0.0 16...

如何判斷自己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 172.31.255.255 192.168.0.0 16 192.168.0.0 192.168.25...