【问题标题】:Determining Source and Destination IPs on same subnet (Python)确定同一子网上的源 IP 和目标 IP(Python)
【发布时间】:2013-11-14 08:54:18
【问题描述】:

编写一个程序,向用户查询源 IP 地址、目标 IP 地址和 32 位子网掩码。全部以点十进制表示法输入。然后程序将确定 src 和 dst 是否在同一个子网上。然后它将以二进制格式打印掩码和两个地址(在单独的行上,彼此垂直对齐)并指示主机应该为谁进行 ARP。

这是我目前所拥有的:

#!/usr/bin/python3

src_ip = input("Please enter the Source IP Address: ")

dst_ip = input("Please enter the Destination IP Address: ")

sub_mask = input("Please enter the Subnet Mask: ")

#convert each to binary
base2_src = [format(int(x), '08b') for x in src_ip.split('.')]
base2_dst = [format(int(x), '08b') for x in dst_ip.split('.')]
base2_mask = [format(int(x), '08b') for x in sub_mask.split('.')]

#print out IP addresses in binary
print("Source IP: ", base2_src)
print("Destination IP: ", base2_dst)
print("Subnet Mask :", base2_mask)

到目前为止,我能够获取输入,将其转换为二进制并在列表中输出。如何确定输入的源和目标是否与用户输入的子网在同一个子网上?我应该将二进制转换后的子网掩码与什么进行比较?

【问题讨论】:

    标签: python input ip ip-address subnet


    【解决方案1】:

    Mask 通过对掩码和 IP 地址执行按位与运算来标识 IP 地址所属的子网。结果将是子网地址。因此,您可以为您的源和目标执行此操作,然后比较结果。

    【讨论】:

    • 所以你的意思是:1)对 src ip 和子网掩码执行 AND,将结果存储在列表中 2)对 dst ip 和子网掩码执行 AND,将结果存储在列表中 3)比较两个结果?但是按位 AND 操作数是否适用于列表?
    • 不。但是为什么dont you store them not as lists, but as binary number variables? That could be done by using pythons内置函数bin()
    • 但是如果它是一个二进制整数列表而不是字符串呢?
    猜你喜欢
    • 2018-04-03
    • 2012-06-28
    • 2014-03-07
    • 2014-04-26
    • 1970-01-01
    • 2018-10-07
    • 2015-06-05
    • 1970-01-01
    • 2015-10-04
    相关资源
    最近更新 更多