python 获取局域网内的广播地址

#-*- coding:utf-8 -*-
import subprocess
import re
import socket
def getBroadAddList():
    ######获取IP以及子网掩码
    #######windows 下的命令是ipconfig,LINUX下是ifconfig,倘若再不行,我们直接用python获取ip
    try:
        try:sys_cmd = subprocess.Popen('ipconfig',stdout=subprocess.PIPE)
        except:sys_cmd = subprocess.Popen('ifconfig',stdout=subprocess.PIPE)
    except:#####如果用ipconfig命令无法获取到机器的ip,使用python的socket模块获取
        ip_add =  socket.gethostbyname(socket.getfqdn(socket.gethostname()))
        index_ = ip_add.rfind(".")
        return [ip_add[:index_]+".255"]
    cmd_res = sys_cmd.stdout.read()
    pattern =  re.compile(r'((\d+\.){3}\d+\s)') #########正则匹配
    ip_list = pattern.findall(cmd_res)
    ip_add = []
    for i in ip_list:
        if  int(i[0].rstrip().split(".")[-1]) == 0:
            subMask = str(i[0])
        else:
            ip_info =  i[0][:i[0].rfind(".")]
            if ip_info not in ip_add:ip_add.append(ip_info)
    #########计算广播地址
    broad_list = []
    for j in ip_add:
        subMask_split = subMask.split(".")
        myIp = (j+".1").split(".")
        str_cast = ""
        for i in xrange(4):
            xx = (int(myIp[i])&int(subMask_split[i]))|((int(subMask_split[i]))^255)
            str_cast = str_cast + str(xx)+"."
        broad_list.append(str_cast.rstrip("."))
    return broad_list
print getBroadAddList()

猜你喜欢

转载自blog.csdn.net/caobin0825/article/details/51362470
今日推荐