微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在python和bash中处理IP和端口

使用python和bash,我想完成两件事:

>需要将[fec2 :: 10]:80格式的ipv6地址和端口组合拆分为fec2 :: 10和80.
>鉴于IP地址和端口组合,我需要确定IP是v4还是v6地址.例如:1.2.3.4:80和[fec2 :: 10]:80

请建议一种方法来做到这一点.

谢谢!

示例代码

#!/usr/bin/env python

import optparse

def main():
    server = "[fec1::1]:80"
    if server.find("[", 0, 2) == -1:
       print "IPv4"
       ip, port = server.split(':')
    else:
       print "IPv6"
       new_ip, port = server.rsplit(':', 1)
       print new_ip
       ip = new_ip.strip('[]')

    print ip
    print port

if __name__ == '__main__':
    main()

这适用于所有情况,除非在没有端口的情况下指定输入.例如:10.78.49.50和[fec2 :: 10]

有什么建议可以解决吗?

解决方法:

假设your_input类似于“[fec2 :: 10]:80”或“1.2.3.4:80”,很容易拆分端口并找出ip地址:

#!/usr/bin/env python3
from ipaddress import ip_address

ip, separator, port = your_input.rpartition(':')
assert separator # separator (`:`) must be present
port = int(port) # convert to integer
ip = ip_address(ip.strip("[]")) # convert to `IPv4Address` or `IPv6Address` 
print(ip.version) # print ip version: `4` or `6`

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐