Mad*_*ddy 5 python bash ip-address
使用 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()
Run Code Online (Sandbox Code Playgroud)
这适用于所有情况,除非指定了没有端口的输入。例如: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`
Run Code Online (Sandbox Code Playgroud)
这是我想出的代码。它看起来冗长而费力,但它解决了所有可能的输入场景。任何关于压缩/更好的建议都是非常受欢迎的:)
#!/usr/bin/env python
import optparse
def main():
server = "[fec1::1]:80"
if server.find("[", 0, 2) == -1:
print "IPv4"
if server.find(":", 0, len(server)) == -1:
ip = server
port = ""
else:
ip, port = server.split(':')
else:
print "IPv6"
index = server.find("]", 0, len(server))
if index == -1:
print "Something wrong"
new_ip = ""
port = ""
else:
if server.find(":", index, len(server)) == -1:
new_ip = server
port = ""
else:
new_ip, port = server.rsplit(':', 1)
print new_ip
ip = new_ip.strip('[]')
print ip
print port
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)