使用Python腳本生成隨機(jī)IP的簡單方法
需求
在某應(yīng)用中,需要根據(jù)一定的規(guī)則生成隨機(jī)的IP地址,規(guī)則類似于192.168.11.0/24這樣的CIDR形式給出。
實(shí)現(xiàn)
經(jīng)過艱苦卓絕的調(diào)試,下面的代碼是可以用的:
RANDOM_IP_POOL=['192.168.10.222/0'] def __get_random_ip(): str_ip = RANDOM_IP_POOL[random.randint(0,len(RANDOM_IP_POOL) - 1)] str_ip_addr = str_ip.split('/')[0] str_ip_mask = str_ip.split('/')[1] ip_addr = struct.unpack('>I',socket.inet_aton(str_ip_addr))[0] mask = 0x0 for i in range(31, 31 - int(str_ip_mask), -1): mask = mask | ( 1 << i) ip_addr_min = ip_addr & (mask & 0xffffffff) ip_addr_max = ip_addr | (~mask & 0xffffffff) return socket.inet_ntoa(struct.pack('>I', random.randint(ip_addr_min, ip_addr_max)))
生成的結(jié)果如:
192.168.10.175 192.168.10.29 192.168.10.30 192.168.10.207 192.168.10.248 192.168.10.145 192.168.10.168 192.168.10.223 192.168.10.66 192.168.10.138 192.168.10.99 192.168.10.136 192.168.10.147 192.168.10.244 192.168.10.73 192.168.10.180
備注
(mask & 0xffffffff)這一用法,目的在于消除mask上32位以上的高位數(shù)據(jù)。由于mask是IPv4的掩碼,所以不需要32位以上的數(shù)據(jù)。這一問題在mask取反之后比較明顯。由于mask是一個32位以上的數(shù)(有可能是64位),取反之后,高位全部為1,計算的結(jié)果就不正確了。因此,在使用之前,需要利用(mask & 0xffffffff)清除高位。
供各位讀者參考。
相關(guān)文章
巧用python和libnmapd,提取Nmap掃描結(jié)果
本文將會講述一系列如何使用一行代碼解析 nmap 掃描結(jié)果,其中會在 Python 環(huán)境中使用到 libnmap 里的 NmapParser 庫,這個庫可以很容易的幫助我們解析 nmap 的掃描結(jié)果2016-08-08Python使用re模塊正則提取字符串中括號內(nèi)的內(nèi)容示例
這篇文章主要介紹了Python使用re模塊正則提取字符串中括號內(nèi)的內(nèi)容,結(jié)合實(shí)例形式分析了Python使用re模塊進(jìn)行針對括號內(nèi)容的正則匹配操作,并簡單解釋了相關(guān)修正符與正則語句的用法,需要的朋友可以參考下2018-06-06Pytorch中如何調(diào)用forward()函數(shù)
這篇文章主要介紹了Pytorch中如何調(diào)用forward()函數(shù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02教你怎么用Python selenium操作瀏覽器對象的基礎(chǔ)API
今天給大家?guī)淼氖顷P(guān)于Python的相關(guān)知識,文章圍繞著怎么用Python selenium操作瀏覽器對象的基礎(chǔ)API展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06