1. 检查IP地址ipaddress/netaddr/tabulate

# check_ip_func.py
import ipaddress

def check_ip(ip):
    try:
        ipaddress.ip_address(ip)
        return True
    except ValueError as err:
        return False
    
ip1='10.1.1.1'
ip2='101.1'
print('Check IP...')
print(ip1,check_ip(ip1))
print(ip2,check_ip(ip2))

def return_correct_ip(ip_addr):
    correct = []
    for ip in ip_addr:
        if check_ip(ip):
            correct.append(ip)
    return correct

print("Checking list of ip addressed")
ip_list=['1.1.1.1','8.8.8.8','2.2.2']
correct=return_correct_ip(ip_list)
print(correct)
Check IP...
10.1.1.1 True
101.1 False
Checking list of ip addressed
['1.1.1.1', '8.8.8.8']

from netaddr import IPAddress
ip = IPAddress("192.168.1.1")
print(ip)
print(ip.version)
print(ip.bits())
print(ip.bin)
print(ip.words)
192.168.1.1
4
11000000.10101000.00000001.00000001
0b11000000101010000000000100000001
(192, 168, 1, 1)
from netaddr import IPNetwork
ip=IPNetwork("192.168.1.1/24")
print(ip)
print(ip.cidr)
print(ip.hostmask)
print(ip.network)
print(ip.netmask)
from netaddr import cidr_merge
summary_list=[IPNetwork('192.168.0.0/24'),IPNetwork('192.168.1.0/24')]
print(cidr_merge(summary_list))
from netaddr import EUI
mac=EUI("4c1fcce52d7d")
print(mac)
print(bin(mac))
from tabulate import tabulate
dis_ip_in_br=[("FatstEthernet0/0","15.0.15.1","up","up"),
              ("FatstEthernet0/1","15.0.12.1","up","up"),
              ("FatstEthernet0/2","15.0.13.1","up","up"),
              ("Loopback0","10.1.1.1","up","up"),
              ("Loopback100","100.0.0.1","up","up")]
print(tabulate(dis_ip_in_br))
----------------  ---------  --  --
FatstEthernet0/0  15.0.15.1  up  up
FatstEthernet0/1  15.0.12.1  up  up
FatstEthernet0/2  15.0.13.1  up  up
Loopback0         10.1.1.1   up  up
Loopback100       100.0.0.1  up  up
----------------  ---------  --  --
columns=['Interface','IP','Stats','Protocol']
print(tabulate(dis_ip_in_br,headers=columns))
Interface         IP         Stats    Protocol
----------------  ---------  -------  ----------
FatstEthernet0/0  15.0.15.1  up       up
FatstEthernet0/1  15.0.12.1  up       up
FatstEthernet0/2  15.0.13.1  up       up
Loopback0         10.1.1.1   up       up
Loopback100       100.0.0.1  up       up
columns=['Interface','IP','Stats','Protocol']
print(tabulate(dis_ip_in_br,headers=columns,tablefmt="grid"))
+------------------+-----------+---------+------------+
| Interface        | IP        | Stats   | Protocol   |
+==================+===========+=========+============+
| FatstEthernet0/0 | 15.0.15.1 | up      | up         |
+------------------+-----------+---------+------------+
| FatstEthernet0/1 | 15.0.12.1 | up      | up         |
+------------------+-----------+---------+------------+
| FatstEthernet0/2 | 15.0.13.1 | up      | up         |
+------------------+-----------+---------+------------+
| Loopback0        | 10.1.1.1  | up      | up         |
+------------------+-----------+---------+------------+
| Loopback100      | 100.0.0.1 | up      | up         |
+------------------+-----------+---------+------------+

ping主机,看哪些可以ping通,哪些不行

# net.txt
8.8.8.8
8.8.4.4
1.1.1.1-3
192.168.0.100-192.168.0.160
# Ping_ip_address.py
import ipaddress
import subprocess

# 该函数功能是对每个IP地址发起ping命令,并记录ping的结果。能ping通的地址保存到reachable列表,
# 不能ping通的地址保存到unreachable列表。
def ping_ip_addresses(ip_addresses):
    reachable = []
    unreachable = []

    for ip in ip_addresses:
        result = subprocess.run(
            # "-n"是ping包数量,"-w"是超时时间,单位是毫秒
            ["ping","-n", "2","-w","1000", ip], capture_output=True
        )
        if result.returncode == 0:
            reachable.append(ip)
        else:
            unreachable.append(ip)
    return reachable, unreachable

# 该函数功能是将输入的IP地址段拆分成一个一个的IP地址
def convert_ranges_to_ip_list(ip_addresses):
    ip_list = []
    for ip_address in ip_addresses:
        if "-" in ip_address:
            start_ip, stop_ip = ip_address.split("-")
            if "." not in stop_ip:
                stop_ip = ".".join(start_ip.split(".")[:-1] + [stop_ip])
            start_ip = ipaddress.ip_address(start_ip)
            stop_ip = ipaddress.ip_address(stop_ip)
            for ip in range(int(start_ip), int(stop_ip) + 1):
                ip_list.append(str(ipaddress.ip_address(ip)))
        else:
            ip_list.append(str(ip_address))
    return ip_list

#if __name__ == '__main()__':

ip_addresses = []

# 读取文件,获取文件中的所有行
with open("net.txt") as f:
    lines = f.readlines()
    for line in lines:
        # 去掉每行的'\n'
        ip_addresses.append(line.strip())

print("需要Ping的IP地址是:",ip_addresses)

# 将地址段转成一个一个的IP地址
addresses = convert_ranges_to_ip_list(ip_addresses)

# 批量ping每个IP地址,reach中存放能ping通的地址,unreach中存放不能ping通的地址,
reach,unreach = ping_ip_addresses(addresses)

print("能ping通的IP地址有:\n",reach)
print("不能ping通的IP地址有:\n",unreach)
需要Ping的IP地址是: ['8.8.8.8', '8.8.4.4', '1.1.1.1-3', '192.168.0.100-192.168.0.160']
能ping通的IP地址有:
 ['8.8.8.8', '8.8.4.4', '1.1.1.1', '1.1.1.2', '1.1.1.3', '192.168.0.100', '192.168.0.101', '192.168.0.102', '192.168.0.104', '192.168.0.105', '192.168.0.106', '192.168.0.107', '192.168.0.108', '192.168.0.109', '192.168.0.111', '192.168.0.112', '192.168.0.113', '192.168.0.114', '192.168.0.115', '192.168.0.116', '192.168.0.117', '192.168.0.118', '192.168.0.119', '192.168.0.120', '192.168.0.121', '192.168.0.122', '192.168.0.123', '192.168.0.124', '192.168.0.125', '192.168.0.126', '192.168.0.127', '192.168.0.128', '192.168.0.129', '192.168.0.130', '192.168.0.131', '192.168.0.132', '192.168.0.133', '192.168.0.134', '192.168.0.135', '192.168.0.136', '192.168.0.137', '192.168.0.138', '192.168.0.139', '192.168.0.140', '192.168.0.141', '192.168.0.142', '192.168.0.143', '192.168.0.144', '192.168.0.145', '192.168.0.146', '192.168.0.147', '192.168.0.148', '192.168.0.149', '192.168.0.150', '192.168.0.151', '192.168.0.152', '192.168.0.153', '192.168.0.154', '192.168.0.155', '192.168.0.156', '192.168.0.157', '192.168.0.158', '192.168.0.159', '192.168.0.160']
不能ping通的IP地址有:
 ['192.168.0.103', '192.168.0.110']
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容