1. 程式人生 > >Python判斷IP是否屬於某子網

Python判斷IP是否屬於某子網

直接上程式碼:
<pre name="code" class="python"># _*_ coding: utf-8 _*_
__author__ = 'Hondsam Xu <[email protected]>'
import socket,struct

'''
 轉換為子網地址,並檢驗和輸出正確的子網地址
 192.168.2.1 -> 192.168.2.1/255.255.255.255
 192.168.2.1/24 -> 192.168.2.0/255.255.255.0
 192.168.2.1/255.255.255.0 -> 192.168.2.0/255.255.255.0
 '''
def format_subnet(subnet_input):
    # 如果輸入的ip,將掩碼加上後輸出
    if subnet_input.find("/") == -1:
        return subnet_input + "/255.255.255.255"

    else:
        # 如果輸入的是短掩碼,則轉換為長掩碼
        subnet = subnet_input.split("/")
        if len(subnet[1]) < 3:
            mask_num = int(subnet[1])
            last_mask_num = mask_num % 8
            last_mask_str = ""
            for i in range(last_mask_num):
                last_mask_str += "1"
            if len(last_mask_str) < 8:
                for i in range(8-len(last_mask_str)):
                    last_mask_str += "0"
            last_mask_str = str(int(last_mask_str,2))
            if mask_num / 8 == 0:
                subnet = subnet[0] + "/" + last_mask_str +"0.0.0"
            elif mask_num / 8 == 1:
                subnet = subnet[0] + "/255." + last_mask_str +".0.0"
            elif mask_num / 8 == 2 :
                subnet = subnet[0] + "/255.255." + last_mask_str +".0"
            elif mask_num / 8 == 3:
                subnet = subnet[0] + "/255.255.255." + last_mask_str
            elif mask_num / 8 == 4:
                subnet = subnet[0] + "/255.255.255.255"
            subnet_input = subnet

        # 計算出正確的子網地址並輸出
        subnet_array = subnet_input.split("/")
        subnet_true = socket.inet_ntoa(\
            struct.pack("!I",struct.unpack("!I",socket.inet_aton(subnet_array[0]))[0] & \
            struct.unpack("!I",socket.inet_aton(subnet_array[1]))[0]))\
            + "/" + subnet_array[1]
        return subnet_true


# 判斷ip是否屬於某個網段
def ip_in_subnet(ip,subnet):
    subnet = format_subnet(str(subnet))
    subnet_array = subnet.split("/")
    ip = format_subnet(ip + "/" + subnet_array[1])
    return ip == subnet

print (ip_in_subnet("192.168.2.252","192.168.0.0/255.255.0.0"))
print (ip_in_subnet("192.168.2.252","192.168.3.0/255.255.255.0"))
print (ip_in_subnet("192.168.2.252","192.168.2.0/23"))
print (ip_in_subnet("192.168.2.252","192.168.2.0/29"))
print (ip_in_subnet("192.168.2.2","192.168.2.2"))
print (ip_in_subnet("192.168.2.2","192.168.2.3"))


相關推薦

Python判斷IP是否屬於

直接上程式碼:<pre name="code" class="python"># _*_ coding: utf-8 _*_ __author__ = 'Hondsam Xu <[email protected]>' import sock

Java-NowCoder-判斷兩個IP是否屬於同一

題目要求:     子網掩碼是用來判斷任意兩臺計算機的IP地址是否屬於同一子網路的根據。     子網掩碼與IP地址結構相同,是32位二進位制數,其中網路號部分全為“1”和主機號部分全為“0”。利用子網掩碼可以判斷兩臺主機是否中同一子網中。若兩臺主機的IP地址分別與它們

五層結構 判斷兩個IP是否處於同一?

網絡管理 主機ip .cn 文件 七層 smt 無限 可靠傳輸 log 互聯網協議按照功能不同分為osi七層或tcp/ip五層或tcp/ip四層 應用層(各種協議) 端口 H

PHP判斷IP是否屬於某個

<?php /** * 判斷IP是否在某個網路內 * @param $ip * @param $network * @return bool */ function ip_in_network($ip, $network) { $ip = (double) (sprintf("%u"

絡管理》IP地址管理與劃分

響應時間 例如 bcf 拓撲圖 設置密碼 屬性 正在 段地址 數量 IP地址管理——ipmaster ipmaster是一款對IP地址進行管理的軟件,使用該軟件可以提高網絡管理員的工作效率。在大型網絡中,使用該軟件可以有序且高效地實現大中小型企業網IP地址的分配和管理。該

Spring Cloud啟動應用時指定IP或忽略卡配置

cond 網絡配置 生態 onf docs col mas utils efault 說明:分布式應用部署到服務上,由於服務器可能存在多張網卡,造成IP地址不準的問題。 解決方法: 1、直接添加忽略某張網卡的配置: spring.cloud.inetutils.i

IP,DNS,掩碼,路由器,交換機,ISP,這些絡術語是什麽意思

即使 onf address 公網ip地址 mac 處的 網絡號 cmd 相同 IP:很明顯,IP就是電腦的身份證。 此處需要分辨私網IP與公網IP,公網IP地址是唯一的,公網IP地址分為ABC三類(還有DE,D類地址稱為廣播地址,供特殊協議向選定的節點發送信息時用。E類地

用正則表示式表示IP,埠和掩碼

一、IP地址的正則表示式 1、無任何判斷: /^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$/ 2、判斷0.0.0.0不符合IP書寫規範: /^(25[0-5]|2[

Spring Cloud啟動應用時指定IP或忽略絡卡配置

spring.cloud.inetutils.default-hostname spring.cloud.inetutils.default-ip-address spring.cloud.inetutils.ignored-interfaces spring.cloud.inetutils.preferre

IP地址劃分和劃分

1、IP地址劃分 2、子網劃分 IPv4地址層次可劃分如下: 網路ID(分配給網點)子網ID(由網點選擇)主機ID(主機使用者選擇)某個給定子網上所有主機都共享同一個子網掩碼,它指定子網ID和主機ID之間的界線。子網掩碼中值為1的位涵蓋網路ID和子網ID,值為0的位則涵

IP地址段與掩碼計算表

    掩碼位數 子網數 十進位制掩碼 IP數 參考可用IP數 0 1 0 0 0 0 4294967296 4

Python判斷IP合法性

 正則粉絲們會這麼做: p = re.compile("^((?:(2[0-4]\d)|(25[0-5])|([01]?\d\d?))\.){3}(?:(2[0-4]\d)|(255[0-5])|

已知ip地址和其掩碼如何求網路號子網號主機號

已知ip地址為10.130.89.95,其子網掩碼為255.255.255.224,求其網路號、子網號和主機號。 要看子網掩碼變長在第幾節,255.255.255.224是在第四節借了位 把224轉換為2進位制,windows的計算器科學型能幫你計算。是1110000

Python判斷一個字串是否包含串的幾種方法

1.使用成員操作符 in >>> s='nihao,shijie' >>> t='nihao' >>> result = t in s >

IP地址分類與掩碼

點分十進位制數表示的IPv4地址被分為幾類,以適應大型、中型、小型的網路。這些類的不同之處在於不同類別的網路地址所佔位數。 主要分為一下幾類: A類 A類地址首位一定是0, 且網路地址佔8位,即子網掩碼預設為225.0.0.0 理論來講,網路地址

Java判斷IP屬於ip

問題是這樣的,輸入一個IP地址,先判斷一下該IP是否是合法的IP地址,然後再判斷該IP地址是否在一個相應的IP段內開始IP為beginIp,結束問題是這樣的,輸入一個IP地址,先判斷一下該IP是否是合

IP地址,以及劃分

****************************隨記,僅是用來記錄起來 乙太網協議 PPP 點對點協議(PPP)為在點對點連線上傳輸多協議資料包提供了一個標準方法。PPP 最初設計是為兩個對等節點之間的 IP 流量傳輸提供一種封裝協議。 PPP通過建立虛擬連線可

python-掃描段下的ip

lin break bsp tar thread main python per not 1 #!/usr/bin/env python 2 #-*- coding:utf-8 -*- 3 ############################ 4 #File

寫一個簡單的python腳本來返回ip地址的掩碼,個數等

pypi package 多少 ask pri 1.2 bfc pty rom 如果我們想快速得到一個IP地址段有多少個ip,快速得到IP地址段的子網掩碼,或者快速得到一個IP地址的二進制,那麽可以來學習一下。本文利用python的一個IP分析模塊IPy實現,首先安裝IPy

python判斷合法IP並區分內和外地址

內網 xtran 3.4 for imp app lse -s mat import redef legit_ip(_ip): compile_ip = re.compile(‘^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5