1.使用mysql內建函式
我試著使用位移位將ip位址值轉換為整數。mysql有執行這些轉換的內建函式。我以前從來沒有聽說過這些活動,所以我想我可以玩一玩。在下面的演示中,我將乙個ip位址字串拖到mysql引擎中,然後使用inet_aton()和inet_ntoa()兩種方法將ip位址轉換為乙個數字,然後再返回到乙個ip位址。
2.計算轉換
簡要轉換思路是:乙個ip位址32bit,一共有四部分,每部分都是乙個十進位制的整數。首先將每部分轉換成二進位制,然後再對每部分移位,最終將每部分的移位結果相加,得到乙個長整型的整數。
在ip到integer轉換中,我們希望獲取乙個ip位址字串值,如「70.112.108.147」,並將其轉換為整數值,例如1181772947。通常,這是為了儲存和比較的目的–我聽說儲存和比較兩個整數值比兩個字串值更容易,速度也更快。不過,撇開資料庫哲學不說,這種價值轉換是以一種稍微明智的方式進行的.
在我們進入**之前,讓我們考慮一下需要做些什麼。ip位址的每個部分(八進位制)由乙個數值介於0-255之間的單個數字組成。此外,每個十進位制數(通常)可以用二進位制表示為乙個位串。當我們組合乙個ip位址的各個部分時,我們必須形成乙個單一的整數值;但是,我們必須這樣做,即沒有任何底層位重疊。
二分查詢:
給定有序區間:[2,5] [8,9] [9,16] [19,25] (代表各類ip分組)
因為區間對放入陣列,因此,陣列的長度肯定是個偶數。因此,當陣列中有重複的元素時,二分查詢重複元素時,若查詢命中,返回的下標是 「陣列下標小的那個」。比如查詢元素9,查詢命中,返回的index=3。
將之放入陣列,得到:[2,5,8,9,9,16,19,25]
假設查詢2:
二分查詢命中,返回元素2的陣列下標 index=0,0是偶數,說明:元素2在區間(index,index+1)區間上,即區間[2,5]
假設查詢9:
二分查詢命中,返回元素9的陣列下標index=3,3是奇數,說明:元素9在區間(index-1,index)上,即區間[8,9],當然了,對於這種特殊的情形,視具體的需求處理。
假設查詢10:
二分查詢不命中,返回 index=-6,(-6+1)*-1=5,說明元素10可插入在陣列下標為5的位置處。由於5是個奇數,因此,元素10在區間(4,5)上,即區間[9,16]
假設查詢18:
二分查詢不命中,返回index=-7,(-7+1)*(-1)=6,說明元素18可插入在陣列下標為6的位置處。由於6是個偶數,因此,元素18不在任何乙個區間。
總之,結合陣列長度永遠是偶數(區間對),再結合二分查詢返回的「陣列下標」是否為奇偶,是否命中,是可以實現:給定乙個數,快速地判斷這個數是否落在某個區間?若落在了某個區間,則具體是哪個區間上的。
1.計算危險ip位址轉換成的ip數字,得到乙個區間;
2.檢查ip位址是否在危險區間中
dhclient請求特定的IP位址
假如我們要請求的位址是192.168.1.10,網絡卡為eth0 1 編輯 etc dhcp dhclient.conf,新增如下幾行 inte ce eth0 這裡指定了介面,只有eth0的介面獲取ip時才會傳送這個request 2 然後以root命令執行如下語句 dhclient r v et...
IP位址查詢
coding utf 8 ip 61.158.147.194 import urllib,urllib2,cookielib,sys,cjson reload sys sys.setdefaultencoding utf 8 url 定義介面位址,限制10qps headers headers ok...
IP位址查詢
coding utf 8 ip 61.158.147.194 import urllib,urllib2,cookielib,sys,cjson reload sys sys.setdefaultencoding utf 8 url 定義介面位址,限制10qps headers headers ok...