下載下傳以及安裝:
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>>>> </code><code>from</code> <code>IPy </code><code>import</code> <code>IP</code>
<code>>>> IP(</code><code>'192.0.0.0/16'</code><code>).version() </code>
<code>4</code>
<code>>>> IP(</code><code>'::2'</code><code>).version()</code>
<code>6</code>
<code>>>></code>
通過指定的網段輸出該網段的IP個數以及IP位址的清單:
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<code>>>> </code><code>import</code> <code>tab</code>
<code>>>> ip </code><code>=</code> <code>IP(</code><code>'192.168.1.0/24'</code><code>) </code>
<code>>>> </code><code>print</code> <code>ip.</code><code>len</code><code>()</code>
<code>256</code>
<code>>>> </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>>>> ip </code><code>=</code> <code>IP(</code><code>'192.168.1.107'</code><code>)</code>
<code>>>> ip.reverseNames()</code>
<code>[</code><code>'107.1.168.192.in-addr.arpa.'</code><code>]</code>
<code>>>> ip.iptype() </code><code>#私有位址</code>
<code>'PRIVATE'</code>
<code>>>> IP(</code><code>'202.15.15.6'</code><code>).iptype()</code>
<code>'PUBLIC'</code> <code>#公有位址</code>
<code>>>> IP(</code><code>"8.8.8.8"</code><code>).</code><code>int</code><code>()</code>
<code>134744072</code> <code>#轉化為整形格式</code>
<code>>>> IP(</code><code>"8.8.8.8"</code><code>).strHex()</code>
<code>'0x8080808'</code> <code>#轉換成十六進制</code>
<code>>>> IP(</code><code>"8.8.8.8"</code><code>).strBin()</code>
<code>'00001000000010000000100000001000'</code> <code>#轉換成二進制 </code>
<code>>>> </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>>>> </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>>>> </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>>>> </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>>>> IP(</code><code>'192.168.1.0/24'</code><code>).strNormal(</code><code>0</code><code>)</code>
<code>'192.168.1.0'</code>
<code>>>> 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>>>> 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>>>> 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>>>> IP(</code><code>'192.168.1.0/24'</code><code>)<IP(</code><code>'192.168.2.0/24'</code><code>)</code>
<code>True</code>
<code>>>> IP(</code><code>'192.168.1.0/24'</code><code>)>IP(</code><code>'192.168.2.0/24'</code><code>)</code>
<code>False</code>
<code>>>> </code><code>'192.168.1.10'</code> <code>in</code> <code>IP(</code><code>'192.168.1.0/24'</code><code>)</code>
<code>>>> 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>>>> 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>>>> 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) > </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