Python中驗(yàn)證IP地址的方法詳解
IP 代表互聯(lián)網(wǎng)協(xié)議,是分配給每臺(tái)連接到互聯(lián)網(wǎng)的計(jì)算機(jī)的唯一地址。 IP 地址有兩個(gè)版本,即 IPv4 和 IPv6。
IPv4 采用點(diǎn)分十進(jìn)制表示法,由 4 個(gè)八位位組組成,每個(gè)八位位組包含 0 到 255 之間的數(shù)字。 IPv6 地址包含 8 組,每組 4 個(gè)十六進(jìn)制數(shù)字,每組代表 16 位。
在本指南中,我們將驗(yàn)證 IPv4 地址。
在 Python 中驗(yàn)證 IP 地址
驗(yàn)證IP地址意味著檢查輸入的IP是否有效。
例如:
Input: 192.168.52.124 Output: Valid IP address Input: 656.1.2.3 Output: Invalid IP address
使用 ipaddress 模塊在 Python 中驗(yàn)證 IP 地址
ipaddress 是 Python 中的一個(gè)模塊,用于根據(jù) IP 地址的類(lèi)型(IPv4 或 IPv6)對(duì) IP 地址進(jìn)行檢查和分類(lèi)。 它還執(zhí)行不同的操作,例如算術(shù)運(yùn)算、比較等。
該模塊有一個(gè)名為 ip_address() 的方法,用于驗(yàn)證 IP 地址。 該函數(shù)以字符串IP作為輸入,如果它能夠成功地將字符串IP轉(zhuǎn)換為IPv4或IPv6地址的對(duì)象,則意味著輸入的IP地址是有效的。
否則,它將引發(fā)一個(gè)值錯(cuò)誤,表明該 IP 似乎不是 IPv4 或 IPv6 地址。 我們?cè)谙旅娴拇a中導(dǎo)入了 ipaddress 模塊,并將整個(gè)代碼寫(xiě)入了 try-except 塊中。
如果 IP 有效,則不會(huì)引發(fā)異常,如果無(wú)效,則值錯(cuò)誤異常將由 except 塊處理。
情況 1:對(duì)于有效的 IP 地址
#Python 3.x
import ipaddress
try:
ip = ipaddress.ip_address("192.168.1.1")
print("Valid IP Address")
except ValueError:
print("Invalid IP Address")
輸出:
#Python 3.x
Valid IP Address
情況 2:IP 地址無(wú)效
#Python 3.x
import ipaddress
try:
ip = ipaddress.ip_address("992.168.1.1")
print("Valid IP Address")
except ValueError:
print("Invalid IP Address")
輸出:
#Python 3.x
Invalid IP Address
使用 RegEx.search() 方法在 Python 中驗(yàn)證 IP 地址
驗(yàn)證 IP 地址的另一種方法是通過(guò)正則表達(dá)式將其與有效 IP 地址的預(yù)定義模式進(jìn)行匹配。 我們通過(guò)調(diào)用 re 模塊的 search() 方法并傳遞正則表達(dá)式和 IP 作為參數(shù),在以下代碼中驗(yàn)證了 IP 地址。
如果 IP 有效,則此方法返回 True。 否則,返回 False。
示例代碼:
#Python 3.x
import re
ip = "192.168.2.3"
regex = "^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])$"
if(re.search(regex, ip)):
print("Valid IP Address")
else:
print("Invalid IP Address")
輸出:
#Python 3.x
Valid IP Address
在 Python 中手動(dòng)驗(yàn)證 IP 地址
我們可以在沒(méi)有任何內(nèi)置庫(kù)正則表達(dá)式的情況下驗(yàn)證 IP 地址。 我們創(chuàng)建了一個(gè)函數(shù),通過(guò)檢查以下代碼中的這三個(gè)條件來(lái)驗(yàn)證 IP 地址。
如果代碼中滿(mǎn)足以下任一條件,則 IP 無(wú)效。
- 八位位組的數(shù)量不是四個(gè)。
- 任何八位字節(jié)都包含除整數(shù)以外的任何內(nèi)容。
- 八位位組內(nèi)的任何數(shù)字都在 0-255 范圍之外。
示例代碼:
#Python 3.x
def validate_ip_address(ip):
octects = ip.split(".")
if len(octects) != 4:
return "Invalid IP"
for number in octects:
if not isinstance(int(number), int):
return "Invalid IP"
if int(number) < 0 or int(number) > 255:
return "Invalid IP"
return "Valid IP"
validate_ip_address("192.168.-1.1")
輸出:
#Python 3.x
'Invalid IP'
方法補(bǔ)充
基于Python實(shí)現(xiàn)IP地址驗(yàn)證程序
這是一個(gè)使用Python編寫(xiě)的簡(jiǎn)單IP地址驗(yàn)證程序。程序接受用戶(hù)輸入的IP地址,然后對(duì)其進(jìn)行驗(yàn)證,確保每個(gè)地址段都是數(shù)字且在0到255之間。如果IP地址格式正確,程序會(huì)輸出“IP地址輸入正確”;如果格式錯(cuò)誤,程序會(huì)指出錯(cuò)誤并退出。
環(huán)境配置
Python 3.x
項(xiàng)目分布
- 用戶(hù)輸入IP地址
- 分割I(lǐng)P地址并驗(yàn)證段數(shù)
- 驗(yàn)證每個(gè)地址段的內(nèi)容
- 輸出驗(yàn)證結(jié)果
詳細(xì)代碼
cause = True # 設(shè)置判斷網(wǎng)址是否正確的標(biāo)志變量為真
ip = input('請(qǐng)輸入IP地址:\n').strip(' ')
line = ip.split('.')
if len(line) == 4: # 如果網(wǎng)址按“.”分為4段
for item in line: # 對(duì)網(wǎng)址各段進(jìn)行判斷
if item.isdigit(): # 是否為數(shù)字
if int(item) > 255 or int(item) < 0:
print('IP地址段輸入大于255或小于0錯(cuò)誤,將退出!!')
cause = False # 網(wǎng)址錯(cuò)誤,判斷網(wǎng)址標(biāo)志變量為假
break # 退出循環(huán)
else:
print('IP地址段輸入非數(shù)字錯(cuò)誤(只能輸入數(shù)字或.),將退出!!')
cause = False
break
if cause:
print('IP地址輸入正確!!')
else:
print('IP地址輸入多于或少于4段地址錯(cuò)誤,將退出!!')
小結(jié)
這是一個(gè)簡(jiǎn)單的Python程序,用于驗(yàn)證用戶(hù)輸入的IP地址是否格式正確。程序通過(guò)分割輸入的字符串并檢查每個(gè)部分,確保它們是有效的數(shù)字并且符合。
到此這篇關(guān)于Python中驗(yàn)證IP地址的方法詳解的文章就介紹到這了,更多相關(guān)Python驗(yàn)證IP地址內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python PyAutoGUI超詳細(xì)實(shí)戰(zhàn)教程 附完整教學(xué)代碼
本文將從環(huán)境搭建、基礎(chǔ)配置、鼠標(biāo)自動(dòng)化、鍵盤(pán)自動(dòng)化、屏幕操作、高級(jí)功能、實(shí)戰(zhàn)案例七個(gè)維度展開(kāi),搭配可直接運(yùn)行的教學(xué)代碼,覆蓋新手入門(mén)到實(shí)戰(zhàn)應(yīng)用的全部核心知識(shí)點(diǎn),對(duì)Python PyAutoGUI 相關(guān)知識(shí)感興趣的朋友跟隨小編一起看看吧2026-02-02
python實(shí)現(xiàn)差分隱私Laplace機(jī)制詳解
今天小編就為大家分享一篇python實(shí)現(xiàn)差分隱私Laplace機(jī)制詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11
解決Django響應(yīng)JsonResponse返回json格式數(shù)據(jù)報(bào)錯(cuò)問(wèn)題
這篇文章主要介紹了解決Django響應(yīng)JsonResponse返回json格式數(shù)據(jù)報(bào)錯(cuò)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08
Tensorflow 1.0之后模型文件、權(quán)重?cái)?shù)值的讀取方式
今天小編就為大家分享一篇Tensorflow 1.0之后模型文件、權(quán)重?cái)?shù)值的讀取方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02
python 將dicom圖片轉(zhuǎn)換成jpg圖片的實(shí)例
今天小編就為大家分享一篇python 將dicom圖片轉(zhuǎn)換成jpg圖片的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01

