【问题标题】:Increment an IP address when the IP address is given in steps in python当IP地址在python中的步骤中给出时增加一个IP地址
【发布时间】:2020-01-18 14:26:49
【问题描述】:

当我们有4 octets 格式的 start_ip 并且步骤也是 4 个八位字节格式时,我如何在 python 中增加 IP 地址。

假设我的 IP 地址为225.1.1.1,步骤为0.0.0.1 当我说 next_ip = start_ip + step 时,它实际上应该评估扩展产生的结果。 我知道ipaddr 模块只需添加一个即可执行此操作,但是当该步骤也以 ipv4 格式给出时,这似乎不起作用。

执行此操作的任何已知步骤:

import ipaddr 
a = ipaddr.ipaddress('225.1.1.1')
b = a +1

这实际上返回了所需的结果。但是当像这样增加时:

b = a + 0.0.0.1 it does not seem to work.

任何已知的解决方案?

【问题讨论】:

  • ReadTheFineManual ipaddress -teration
  • 为什么有人会用点分四进制表示法指定增量?这些数据是您从其他地方获得的吗?您是否期望看到类似0.1.0.1 的内容?

标签: python ip-address


【解决方案1】:

不精炼但我猜是可行的,这里是python sn-p

def increment_ip_addr(ip_addr):
    ip_arr = ip_addr.split('.')

    def increment_by_1(digit):
        return str(int(digit) + 1)

    if int(ip_arr[3]) > 254:
        ip_arr[3] = "1"
        if int(ip_arr[2]) > 254:
            ip_arr[2] = "1"
            if int(ip_arr[1]) > 254:
                ip_arr[1] = "1"
                if int(ip_arr[0]) > 254:
                    ip_arr[0] = "1"
                else:
                    ip_arr[0] = increment_by_1(ip_arr[0])
            else:
                ip_arr[1] = increment_by_1(ip_arr[1])
        else:
            ip_arr[2] = increment_by_1(ip_arr[2])
    else:
        ip_arr[3] = increment_by_1(ip_arr[3])
    print(f"for ip address: {ip_addr} The incremented ip is: {'.'.join(ip_arr)}")

[increment_ip_addr(ip_addr) for ip_addr in ['1.1.1.1', "1.1.1.255", "1.255.1.255", "255.255.255.255"]]

相应的控制台输出:

for ip address: 1.1.1.1 The incremented ip is: 1.1.1.2
for ip address: 1.1.1.255 The incremented ip is: 1.1.2.1      
for ip address: 1.255.1.255 The incremented ip is: 1.255.2.1  
for ip address: 255.255.255.255 The incremented ip is: 1.1.1.1

如果有优化版本请告诉我

【讨论】:

    【解决方案2】:

    这段代码可以添加两个 4 字节:

    first = '192.168.0.4'
    second = '0.0.0.1'
    ipaddress.ip_address(first) + int(ipaddress.ip_address(second))
    

    这将导致:IPv4Address('192.168.0.5')

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-08
      • 1970-01-01
      • 2012-06-06
      • 2023-02-22
      • 2018-12-08
      • 1970-01-01
      • 1970-01-01
      • 2021-10-06
      相关资源
      最近更新 更多