天天看點

ip位址處理子產品IPy

下載下傳以及安裝:

 tar -zxvf IPy-0.83.tar.gz 

 cd IPy-0.83

 python setup.py install

可以用version的方法區分IPV4或者IPV6,如下面的代碼,傳回4就是ipv4,傳回6就是IPV6.

1

2

3

4

5

6

<code>&gt;&gt;&gt; </code><code>from</code> <code>IPy </code><code>import</code> <code>IP</code>

<code>&gt;&gt;&gt; IP(</code><code>'192.0.0.0/16'</code><code>).version()  </code>

<code>4</code>

<code>&gt;&gt;&gt; IP(</code><code>'::2'</code><code>).version()</code>

<code>6</code>

<code>&gt;&gt;&gt;</code>

通過指定的網段輸出該網段的IP個數以及IP位址的清單:

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

<code>&gt;&gt;&gt; </code><code>import</code> <code>tab</code>

<code>&gt;&gt;&gt; ip </code><code>=</code> <code>IP(</code><code>'192.168.1.0/24'</code><code>) </code>

<code>&gt;&gt;&gt; </code><code>print</code> <code>ip.</code><code>len</code><code>()</code>

<code>256</code>

<code>&gt;&gt;&gt; </code><code>for</code> <code>x </code><code>in</code> <code>ip:</code>

<code>    </code><code>print</code> <code>x</code>

<code>    </code> 

<code>192.168</code><code>.</code><code>1.0</code>

<code>192.168</code><code>.</code><code>1.1</code>

<code>192.168</code><code>.</code><code>1.2</code>

<code>192.168</code><code>.</code><code>1.3</code>

<code>192.168</code><code>.</code><code>1.4</code>

<code>192.168</code><code>.</code><code>1.5</code>

<code>192.168</code><code>.</code><code>1.6</code>

<code>192.168</code><code>.</code><code>1.7</code>

<code>192.168</code><code>.</code><code>1.8</code>

<code>192.168</code><code>.</code><code>1.9</code>

<code>192.168</code><code>.</code><code>1.10</code>

<code>192.168</code><code>.</code><code>1.11</code>

<code>192.168</code><code>.</code><code>1.12</code>

<code>192.168</code><code>.</code><code>1.13</code> 

<code>.......</code>

下面介紹IP類的幾個常見的方法,包括反向解析域名,IP類型,IP轉換等。

<code>&gt;&gt;&gt; ip </code><code>=</code> <code>IP(</code><code>'192.168.1.107'</code><code>)</code>

<code>&gt;&gt;&gt; ip.reverseNames()</code>

<code>[</code><code>'107.1.168.192.in-addr.arpa.'</code><code>]</code>

<code>&gt;&gt;&gt; ip.iptype()                            </code><code>#私有位址</code>

<code>'PRIVATE'</code>

<code>&gt;&gt;&gt; IP(</code><code>'202.15.15.6'</code><code>).iptype()</code>

<code>'PUBLIC'</code>                                    <code>#公有位址</code>

<code>&gt;&gt;&gt; IP(</code><code>"8.8.8.8"</code><code>).</code><code>int</code><code>()</code>

<code>134744072</code>                                <code>#轉化為整形格式</code>

<code>&gt;&gt;&gt; IP(</code><code>"8.8.8.8"</code><code>).strHex()</code>

<code>'0x8080808'</code>                                <code>#轉換成十六進制</code>

<code>&gt;&gt;&gt; IP(</code><code>"8.8.8.8"</code><code>).strBin()</code>

<code>'00001000000010000000100000001000'</code>       <code>#轉換成二進制             </code>

<code>&gt;&gt;&gt; </code><code>print</code> <code>(IP(</code><code>0x8080808</code><code>))</code>

<code>8.8</code><code>.</code><code>8.8</code>                                <code>#十六進制轉換為IP格式</code>

IP方法也支援網絡位址的轉換,如下:

<code>&gt;&gt;&gt; </code><code>print</code> <code>(IP(</code><code>'192.168.1.0'</code><code>).make_net(</code><code>'255.255.255.0'</code><code>))</code>

<code>192.168</code><code>.</code><code>1.0</code><code>/</code><code>24</code>

<code>&gt;&gt;&gt; </code><code>print</code> <code>(IP(</code><code>'192.168.1.0/255.255.255.0'</code><code>,make_net</code><code>=</code><code>True</code><code>))</code>

<code>&gt;&gt;&gt; </code><code>print</code> <code>(IP(</code><code>'192.168.1.0-192.168.1.255'</code><code>,make_net</code><code>=</code><code>True</code><code>))</code>

當然也可以反過來:

<code>&gt;&gt;&gt; IP(</code><code>'192.168.1.0/24'</code><code>).strNormal(</code><code>0</code><code>)</code>

<code>'192.168.1.0'</code>

<code>&gt;&gt;&gt; IP(</code><code>'192.168.1.0/24'</code><code>).strNormal(</code><code>1</code><code>)</code>

<code>'192.168.1.0/24'</code>

<code>&gt;&gt;&gt; IP(</code><code>'192.168.1.0/24'</code><code>).strNormal(</code><code>2</code><code>)</code>

<code>'192.168.1.0/255.255.255.0'</code>

<code>&gt;&gt;&gt; IP(</code><code>'192.168.1.0/24'</code><code>).strNormal(</code><code>3</code><code>)</code>

<code>'192.168.1.0-192.168.1.255'</code>

比較IP,傳回真假:

<code>&gt;&gt;&gt; IP(</code><code>'192.168.1.0/24'</code><code>)&lt;IP(</code><code>'192.168.2.0/24'</code><code>)</code>

<code>True</code>

<code>&gt;&gt;&gt; IP(</code><code>'192.168.1.0/24'</code><code>)&gt;IP(</code><code>'192.168.2.0/24'</code><code>)</code>

<code>False</code>

<code>&gt;&gt;&gt; </code><code>'192.168.1.10'</code> <code>in</code> <code>IP(</code><code>'192.168.1.0/24'</code><code>)</code>

<code>&gt;&gt;&gt; IP(</code><code>'192.168.1.0/24'</code><code>) </code><code>in</code> <code>IP(</code><code>'192.168.0.0/16'</code><code>)</code>

判斷是否重疊,傳回0(代表沒重疊)或者1(代表有重疊):

<code>&gt;&gt;&gt; IP(</code><code>'192.168.0.0/23'</code><code>).overlaps(</code><code>'192.168.1.0/24'</code><code>)</code>

<code>1</code>

<code>&gt;&gt;&gt; IP(</code><code>'192.168.1.0/24'</code><code>).overlaps(</code><code>'192.168.2.0'</code><code>)   </code>

<code>0</code>

示例:根據輸入的IP或者子網傳回網絡,掩碼,廣播,,反向解析,子網數,IP類型資訊。

24

25

<code>#!/usr/bin/env python</code>

<code># -*- coding: utf-8 -*-</code>

<code>#2017,8,24</code>

<code>from</code> <code>IPy </code><code>import</code> <code>IP</code>

<code>        </code> 

<code>ip_s </code><code>=</code> <code>raw_input</code><code>(</code><code>'Please input an IP or net-range:'</code><code>)</code>

<code>ips </code><code>=</code> <code>IP(ip_s)</code>

<code>if</code> <code>len</code><code>(ips) &gt; </code><code>1</code><code>:</code>

<code>         </code> 

<code>        </code><code>print</code> <code>(</code><code>'net:%s'</code> <code>%</code> <code>ips.net()) </code><code>#輸出網絡位址</code>

<code>        </code><code>print</code> <code>(</code><code>'netmask:%s'</code> <code>%</code> <code>ips.netmask()) </code><code>#輸出網絡掩碼</code>

<code>        </code><code>print</code> <code>(</code><code>'broadcast:%s'</code> <code>%</code> <code>ips.broadcast()) </code><code>#輸出廣播位址</code>

<code>        </code><code>print</code> <code>(</code><code>'subnet:%s'</code> <code>%</code> <code>len</code><code>(ips)) </code><code>#輸出網絡子網數</code>

<code>        </code><code>print</code> <code>(</code><code>'reverse address: %s'</code> <code>%</code> <code>ips.reverseNames()[</code><code>0</code><code>]) </code><code>#輸出位址的反向解析</code>

<code>else</code><code>:</code>

<code>         </code><code>print</code> <code>(</code><code>'reverse address: %s'</code> <code>%</code> <code>ips.reverseNames()[</code><code>0</code><code>]) </code><code>#輸出位址的反向解析</code>

<code>print</code> <code>(</code><code>'hexadecimal:%s'</code> <code>%</code> <code>ips.strHex()) </code><code>#輸出十六進制</code>

<code>print</code> <code>(</code><code>'binary ip: %s'</code> <code>%</code> <code>ips.strBin())  </code><code>#輸出二進制</code>

<code>print</code> <code>(</code><code>'iptype :%s'</code> <code>%</code> <code>ips.iptype()) </code><code>#輸出位址類型,如私有,公有,換回位址</code>

運作結果:

<code>[root@China IP]</code><code># python IP_simple1.py </code>

<code>Please </code><code>input</code> <code>an IP </code><code>or</code> <code>net</code><code>-</code><code>range</code><code>:</code><code>192.168</code><code>.</code><code>2.0</code><code>/</code><code>24</code>

<code>net:</code><code>192.168</code><code>.</code><code>2.0</code>

<code>netmask:</code><code>255.255</code><code>.</code><code>255.0</code>

<code>broadcast:</code><code>192.168</code><code>.</code><code>2.255</code>

<code>subnet:</code><code>256</code>

<code>reverse address: </code><code>2.168</code><code>.</code><code>192.in</code><code>-</code><code>addr.arpa.</code>

<code>hexadecimal:</code><code>0xc0a80200</code>

<code>binary ip: </code><code>11000000101010000000001000000000</code>

<code>iptype :PRIVATE</code>

<code>[root@China IP]</code><code>#</code>

<code>Please </code><code>input</code> <code>an IP </code><code>or</code> <code>net</code><code>-</code><code>range</code><code>:</code><code>192.168</code><code>.</code><code>2.0</code>

<code>reverse address: </code><code>0.2</code><code>.</code><code>168.192</code><code>.</code><code>in</code><code>-</code><code>addr.arpa.</code>

總結:寫代碼的時候一定要厘清大小寫。

<a href="https://s2.51cto.com/wyfs02/M02/9F/7F/wKioL1mdjNLAZXKqAAQF1aT1ixQ687.png-wh_500x0-wm_3-wmp_4-s_2899752829.png" target="_blank"></a>

本文轉自 天道酬勤VIP 51CTO部落格,原文連結:http://blog.51cto.com/tdcqvip/1958806