比较来自世界各地的卖家的域名和 IT 服务价格

如何查看地址 IP 在 Python?

如何最好检查这一点 IP, 由用户输入,有效吗? 他就像一个字符串。
已邀请:

三叔

赞同来自:

不要拆卸它。 刚问。


import socket

try:
socket.inet_aton/addr/
# legal
except socket.error:
# Not legal

石油百科

赞同来自:

import socket

def is_valid_ipv4_address/address/:
try:
socket.inet_pton/socket.AF_INET, address/
except AttributeError: # no inet_pton here, sorry
try:
socket.inet_aton/address/
except socket.error:
return False
return address.count/'.'/ == 3
except socket.error: # not a valid address
return False

return True

def is_valid_ipv6_address/address/:
try:
socket.inet_pton/socket.AF_INET6, address/
except socket.error: # not a valid address
return False
return True

江南孤鹜

赞同来自:

http://pypi.python.org/pypi/IPy/
/模块旨在使用 IP 地址/ 让我们给出一个例外 ValueError 无效地址。


>>> from IPy import IP
>>> IP/'127.0.0.1'/
IP/'127.0.0.1'/
>>> IP/'277.0.0.1'/
Traceback /most recent call last/:
...
ValueError: '277.0.0.1': single byte must be 0 <= byte < 256
>>> IP/'foobar'/
Traceback /most recent call last/:
...
ValueError: invalid literal for long// with base 10: 'foobar'


然而,以及尘土蒂纳的答案,他将采取这样的东西 "4" 和 "192.168", 由于已经提到,这些是有效地址 IP.

如果您正在使用 Python 3.3 或以后的版本,现在它包括
http://docs.python.org/py3k/library/ipaddress.html
:


>>> import ipaddress
>>> ipaddress.ip_address/'127.0.0.1'/
IPv4Address/'127.0.0.1'/
>>> ipaddress.ip_address/'277.0.0.1'/
Traceback /most recent call last/:
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.3/ipaddress.py", line 54, in ip_address
address/
ValueError: '277.0.0.1' does not appear to be an IPv4 or IPv6 address
&gt;&gt;&gt; ipaddress.ip_address/'foobar'/
Traceback /most recent call last/:
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.3/ipaddress.py", line 54, in ip_address
address/
ValueError: 'foobar' does not appear to be an IPv4 or IPv6 address


为了 Python 2 您可以获得相同的功能 ipaddress, 如果安装 python-ipaddress:


pip install ipaddress


该模块兼容 Python 2 并提供非常相似 API 在模块上 ipaddress, 包含在标准库中 Python 以。。。开始 Python 3.3. 更多细节
https://github.com/HaDiNet/pyt ... ME.md
. 在 Python 2 您需要明确转换地址字符串 IP 在 unicode:
ipaddress.ip_address/u'127.0.0.1'/

.
</module></stdin></module></stdin>

郭文康

赞同来自:

以。。。开始 Python 3.4, 验证地址正确性的最佳方法 IPv6 或者 IPv4 - 这使用了操作库 Python Standard Library module
ipaddress

- IPv4/IPv6 s.a.
https://docs.python.org/3/library/ipaddress.html
完整的文档。

例子 :


#!/usr/bin/env python

import ipaddress
import sys

try:
ip = ipaddress.ip_address/sys.argv[1]/
print/'%s is a correct IP%s address.' % /ip, ip.version//
except ValueError:
print/'address/netmask is invalid: %s' % sys.argv[1]/
except:
print/'Usage : %s ip' % sys.argv[0]/


对于其他版本: Github, phihag / Philipp Hagemeister, "Python 3.3's 旧版本的IP地址 Python",
https://github.com/phihag/ipaddress
Budkort从 phihag 可用,例如, Anaconda Python 2.7 & 进入安装程序。 s.a.
https://docs.continuum.io/anaconda/pkg-docs
安装S. pip:


pip install ipaddress


s.a.: ipaddress 1.0.17, "IPv4/IPv6 图书馆操纵", "端口模块 3.3+ ipaddress",
https://pypi.python.org/pypi/ipaddress/1.0.17

奔跑吧少年

赞同来自:

def is_valid_ip/ip/:
"""Validates IP addresses.
"""
return is_valid_ipv4/ip/ or is_valid_ipv6/ip/


IPv4:


def is_valid_ipv4/ip/:
"""Validates IPv4 addresses.
"""
pattern = re.compile/r"""
^
/?:
# Dotted variants:
/?:
# Decimal 1-255 /no leading 0's/
[3-9]\d?|2/?:5[0-5]|[0-4]?\d/?|1\d{0,2}
|
0x0*[0-9a-f]{1,2} # Hexadecimal 0x0 - 0xFF /possible leading 0's/
|
0+[1-3]?[0-7]{0,2} # Octal 0 - 0377 /possible leading 0's/
/
/?: # Repeat 0-3 times, separated by a dot
\.
/?:
[3-9]\d?|2/?:5[0-5]|[0-4]?\d/?|1\d{0,2}
|
0x0*[0-9a-f]{1,2}
|
0+[1-3]?[0-7]{0,2}
/
/{0,3}
|
0x0*[0-9a-f]{1,8} # Hexadecimal notation, 0x0 - 0xffffffff
|
0+[0-3]?[0-7]{0,10} # Octal notation, 0 - 037777777777
|
# Decimal notation, 1-4294967295:
429496729[0-5]|42949672[0-8]\d|4294967[01]\d\d|429496[0-6]\d{3}|
42949[0-5]\d{4}|4294[0-8]\d{5}|429[0-3]\d{6}|42[0-8]\d{7}|
4[01]\d{8}|[1-3]\d{0,9}|[4-9]\d{0,8}
/
$
""", re.VERBOSE | re.IGNORECASE/
return pattern.match/ip/ is not None


IPv6:


def is_valid_ipv6/ip/:
"""Validates IPv6 addresses.
"""
pattern = re.compile/r"""
^
\s* # Leading whitespace
/?!.*::.*::/ # Only a single whildcard allowed
/?:/?!:/|:/?=:// # Colon iff it would be part of a wildcard
/?: # Repeat 6 times:
[0-9a-f]{0,4} # A group of at most four hexadecimal digits
/?:/?<=::/|/?::/:/ # Colon unless preceeded by wildcard
/{6} #
/?: # Either
[0-9a-f]{0,4} # Another group
/?:/?<=::/|/?<!::/:/ # Colon unless preceeded by wildcard
[0-9a-f]{0,4} # Last group
/?: /?<=::/ # Colon iff preceeded by exacly one colon
| /?<!:/ #
| /?<=:/ /?<!::/ : #
/ # OR
| # A v4 address with NO leading zeros
/?:25[0-4]|2[0-4]\d|1\d\d|[1-9]?\d/
/?: \.
/?:25[0-4]|2[0-4]\d|1\d\d|[1-9]?\d/
/{3}
/
\s* # Trailing whitespace
$
""", re.VERBOSE | re.IGNORECASE | re.DOTALL/
return pattern.match/ip/ is not None


版本 IPv6 用途 "
/?:/?<=::/|/?<!::/:/

", 可以被替换 "
/?/?<!::/:/

" 在发动机上 regex, 支持带大面包的条件名称 /它是。 PCRE, .NET/

编辑

:

丢弃的本机选项。

扩展 regex, 匹配 RFC.

加回了 regex 为了 IPv6 地址。

Edit2

:

我发现了几个链接讨论如何拆卸地址 IPv6 从 regex:

http://forums.dartware.com/viewtopic.php?t=452
-InterMapper 论坛

http://www.vankouteren.eu/blog ... sion/
- 博客 Patrick's playground

http://download.dartware.com/t ... ex.pl
- 设想 Perl 有一堆测试。 看起来像mo. regex 落在几个测试中。

Edit3

:

最后,可以写出所有测试通过的模式,我也很高兴。
</div
<div class="answer_text">
我希望它足够简单和pyatovsky:


def is_valid_ip/ip/:
m = re.match/r"^/\d{1,3}/\./\d{1,3}/\./\d{1,3}/\./\d{1,3}/$", ip/
return bool/m/ and all/map/lambda n: 0 &lt;= int/n/ &lt;= 255, m.groups////


</div>
<div class="answer_text">
我想它会这样做......


def validIP/address/:
parts = address.split/"."/
if len/parts/ != 4:
return False
for item in parts:
if not 0 &lt;= int/item/ &lt;= 255:
return False
return True


</div>
<div class="answer_text">
我必须向Marcus Jander Dzhardot致敬 - 我的大多数帖子都受到他的帖子的启发。

我发现Marcus的答案仍然不符合一些例子 IPv6 在情景中 Perl, 他的回答是指的。

这是我的 regex, 它在此脚本中传输所有示例 Perl:


r"""^
\s* # Leading whitespace
# Zero-width lookaheads to reject too many quartets
/?:
# 6 quartets, ending IPv4 address; no wildcards
/?:[0-9a-f]{1,4}/?::/?!:///{6}
/?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d/
/?:\./?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d//{3}
|
# 0-5 quartets, wildcard, ending IPv4 address
/?:/?:[0-9a-f]{1,4}/?::/?!:///{0,4}[0-9a-f]{1,4}/?
/?:::/?!://
/?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d/
/?:\./?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d//{3}
|
# 0-4 quartets, wildcard, 0-1 quartets, ending IPv4 address
/?:/?:[0-9a-f]{1,4}/?::/?!:///{0,3}[0-9a-f]{1,4}/?
/?:::/?!://
/?:[0-9a-f]{1,4}/?::/?!:///?
/?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d/
/?:\./?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d//{3}
|
# 0-3 quartets, wildcard, 0-2 quartets, ending IPv4 address
/?:/?:[0-9a-f]{1,4}/?::/?!:///{0,2}[0-9a-f]{1,4}/?
/?:::/?!://
/?:[0-9a-f]{1,4}/?::/?!:///{0,2}
/?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d/
/?:\./?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d//{3}
|
# 0-2 quartets, wildcard, 0-3 quartets, ending IPv4 address
/?:/?:[0-9a-f]{1,4}/?::/?!:///{0,1}[0-9a-f]{1,4}/?
/?:::/?!://
/?:[0-9a-f]{1,4}/?::/?!:///{0,3}
/?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d/
/?:\./?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d//{3}
|
# 0-1 quartets, wildcard, 0-4 quartets, ending IPv4 address
/?:[0-9a-f]{1,4}/{0,1}
/?:::/?!://
/?:[0-9a-f]{1,4}/?::/?!:///{0,4}
/?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d/
/?:\./?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d//{3}
|
# wildcard, 0-5 quartets, ending IPv4 address
/?:::/?!://
/?:[0-9a-f]{1,4}/?::/?!:///{0,5}
/?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d/
/?:\./?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d//{3}
|
# 8 quartets; no wildcards
/?:[0-9a-f]{1,4}/?::/?!:///{7}[0-9a-f]{1,4}
|
# 0-7 quartets, wildcard
/?:/?:[0-9a-f]{1,4}/?::/?!:///{0,6}[0-9a-f]{1,4}/?
/?:::/?!://
|
# 0-6 quartets, wildcard, 0-1 quartets
/?:/?:[0-9a-f]{1,4}/?::/?!:///{0,5}[0-9a-f]{1,4}/?
/?:::/?!://
/?:[0-9a-f]{1,4}/?
|
# 0-5 quartets, wildcard, 0-2 quartets
/?:/?:[0-9a-f]{1,4}/?::/?!:///{0,4}[0-9a-f]{1,4}/?
/?:::/?!://
/?:/?:[0-9a-f]{1,4}/?::/?!:///{0,1}[0-9a-f]{1,4}/?
|
# 0-4 quartets, wildcard, 0-3 quartets
/?:/?:[0-9a-f]{1,4}/?::/?!:///{0,3}[0-9a-f]{1,4}/?
/?:::/?!://
/?:/?:[0-9a-f]{1,4}/?::/?!:///{0,2}[0-9a-f]{1,4}/?
|
# 0-3 quartets, wildcard, 0-4 quartets
/?:/?:[0-9a-f]{1,4}/?::/?!:///{0,2}[0-9a-f]{1,4}/?
/?:::/?!://
/?:/?:[0-9a-f]{1,4}/?::/?!:///{0,3}[0-9a-f]{1,4}/?
|
# 0-2 quartets, wildcard, 0-5 quartets
/?:/?:[0-9a-f]{1,4}/?::/?!:///{0,1}[0-9a-f]{1,4}/?
/?:::/?!://
/?:/?:[0-9a-f]{1,4}/?::/?!:///{0,4}[0-9a-f]{1,4}/?
|
# 0-1 quartets, wildcard, 0-6 quartets
/?:[0-9a-f]{1,4}/?
/?:::/?!://
/?:/?:[0-9a-f]{1,4}/?::/?!:///{0,5}[0-9a-f]{1,4}/?
|
# wildcard, 0-7 quartets
/?:::/?!://
/?:/?:[0-9a-f]{1,4}/?::/?!:///{0,6}[0-9a-f]{1,4}/?
/
/?://?:1/?:2[0-7]|[01]\d/|\d\d?//? # With an optional CIDR routing prefix /0-128/
\s* # Trailing whitespace
$"""


我也收集了一个剧本 Python, 检查所有这些示例 IPv6; 他在
http://pastebin.com/TKLfQUG0
, 因为他太大了在这里发表他。

您可以使用测试结果和示例的参数运行脚本 "[result]=[example]", 因为:


python script.py Fail=::1.2.3.4: pass=::127.0.0.1 false=::: True=::1


或者您可以在不指向任何参数的情况下启动所有测试,因此:


python script.py


无论如何,我希望这将帮助别人!
</div>
<div class="answer_text">
考虑地址 IPv4 作为 "ip".


if re.match/r'^//\d{1,2}|1\d{2}|2[0-4]\d|25[0-5]/\./{3}/\d{1,2}|1\d{2}|2[0-4]\d|25[0-5]/$', ip/: 
print "Valid IP"
else:
print "Invalid IP"


</div>
<div class="answer_text">
我发明了这个简单版本


def ip_checkv4/ip/:
parts=ip.split/"."/
if len/parts/&lt;4 or len/parts/&gt;4:
return "invalid IP length should be 4 not greater or less than 4"
else:
while len/parts/== 4:
a=int/parts[0]/
b=int/parts[1]/
c=int/parts[2]/
d=int/parts[3]/
if a&lt;= 0 or a == 127 :
return "invalid IP address"
elif d == 0:
return "host id should not be 0 or less than zero "
elif a&gt;=255:
return "should not be 255 or greater than 255 or less than 0 A"
elif b&gt;=255 or b&lt;0:
return "should not be 255 or greater than 255 or less than 0 B"
elif c&gt;=255 or c&lt;0:
return "should not be 255 or greater than 255 or less than 0 C"
elif d&gt;=255 or c&lt;0:
return "should not be 255 or greater than 255 or less than 0 D"
else:
return "Valid IP address ", ip

p=raw_input/"Enter IP address"/
print ip_checkv4/p/


</div>
<div class="answer_text">
我只需要拆卸地址 IP v4. 我基于寒意战略的决定应该:

def getIP//:
valid = False
while not valid :
octets = raw_input/ "Remote Machine IP Address:" /.strip//.split/"."/
try: valid=len/ filter/ lambda/item/:0&lt;=int/item/&lt;256, octets/ / == 4
except: valid = False
return ".".join/ octets /
</div>

石油百科

赞同来自:

我希望它足够简单和pyatovsky:


def is_valid_ip/ip/:
m = re.match/r"^/\d{1,3}/\./\d{1,3}/\./\d{1,3}/\./\d{1,3}/$", ip/
return bool/m/ and all/map/lambda n: 0 <= int/n/ <= 255, m.groups////

三叔

赞同来自:

我想它会这样做......


def validIP/address/:
parts = address.split/"."/
if len/parts/ != 4:
return False
for item in parts:
if not 0 <= int/item/ <= 255:
return False
return True

卫东

赞同来自:

我必须向Marcus Jander Dzhardot致敬 - 我的大多数帖子都受到他的帖子的启发。

我发现Marcus的答案仍然不符合一些例子 IPv6 在情景中 Perl, 他的回答是指的。

这是我的 regex, 它在此脚本中传输所有示例 Perl:


r"""^
\s* # Leading whitespace
# Zero-width lookaheads to reject too many quartets
/?:
# 6 quartets, ending IPv4 address; no wildcards
/?:[0-9a-f]{1,4}/?::/?!:///{6}
/?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d/
/?:\./?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d//{3}
|
# 0-5 quartets, wildcard, ending IPv4 address
/?:/?:[0-9a-f]{1,4}/?::/?!:///{0,4}[0-9a-f]{1,4}/?
/?:::/?!://
/?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d/
/?:\./?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d//{3}
|
# 0-4 quartets, wildcard, 0-1 quartets, ending IPv4 address
/?:/?:[0-9a-f]{1,4}/?::/?!:///{0,3}[0-9a-f]{1,4}/?
/?:::/?!://
/?:[0-9a-f]{1,4}/?::/?!:///?
/?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d/
/?:\./?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d//{3}
|
# 0-3 quartets, wildcard, 0-2 quartets, ending IPv4 address
/?:/?:[0-9a-f]{1,4}/?::/?!:///{0,2}[0-9a-f]{1,4}/?
/?:::/?!://
/?:[0-9a-f]{1,4}/?::/?!:///{0,2}
/?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d/
/?:\./?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d//{3}
|
# 0-2 quartets, wildcard, 0-3 quartets, ending IPv4 address
/?:/?:[0-9a-f]{1,4}/?::/?!:///{0,1}[0-9a-f]{1,4}/?
/?:::/?!://
/?:[0-9a-f]{1,4}/?::/?!:///{0,3}
/?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d/
/?:\./?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d//{3}
|
# 0-1 quartets, wildcard, 0-4 quartets, ending IPv4 address
/?:[0-9a-f]{1,4}/{0,1}
/?:::/?!://
/?:[0-9a-f]{1,4}/?::/?!:///{0,4}
/?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d/
/?:\./?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d//{3}
|
# wildcard, 0-5 quartets, ending IPv4 address
/?:::/?!://
/?:[0-9a-f]{1,4}/?::/?!:///{0,5}
/?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d/
/?:\./?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d//{3}
|
# 8 quartets; no wildcards
/?:[0-9a-f]{1,4}/?::/?!:///{7}[0-9a-f]{1,4}
|
# 0-7 quartets, wildcard
/?:/?:[0-9a-f]{1,4}/?::/?!:///{0,6}[0-9a-f]{1,4}/?
/?:::/?!://
|
# 0-6 quartets, wildcard, 0-1 quartets
/?:/?:[0-9a-f]{1,4}/?::/?!:///{0,5}[0-9a-f]{1,4}/?
/?:::/?!://
/?:[0-9a-f]{1,4}/?
|
# 0-5 quartets, wildcard, 0-2 quartets
/?:/?:[0-9a-f]{1,4}/?::/?!:///{0,4}[0-9a-f]{1,4}/?
/?:::/?!://
/?:/?:[0-9a-f]{1,4}/?::/?!:///{0,1}[0-9a-f]{1,4}/?
|
# 0-4 quartets, wildcard, 0-3 quartets
/?:/?:[0-9a-f]{1,4}/?::/?!:///{0,3}[0-9a-f]{1,4}/?
/?:::/?!://
/?:/?:[0-9a-f]{1,4}/?::/?!:///{0,2}[0-9a-f]{1,4}/?
|
# 0-3 quartets, wildcard, 0-4 quartets
/?:/?:[0-9a-f]{1,4}/?::/?!:///{0,2}[0-9a-f]{1,4}/?
/?:::/?!://
/?:/?:[0-9a-f]{1,4}/?::/?!:///{0,3}[0-9a-f]{1,4}/?
|
# 0-2 quartets, wildcard, 0-5 quartets
/?:/?:[0-9a-f]{1,4}/?::/?!:///{0,1}[0-9a-f]{1,4}/?
/?:::/?!://
/?:/?:[0-9a-f]{1,4}/?::/?!:///{0,4}[0-9a-f]{1,4}/?
|
# 0-1 quartets, wildcard, 0-6 quartets
/?:[0-9a-f]{1,4}/?
/?:::/?!://
/?:/?:[0-9a-f]{1,4}/?::/?!:///{0,5}[0-9a-f]{1,4}/?
|
# wildcard, 0-7 quartets
/?:::/?!://
/?:/?:[0-9a-f]{1,4}/?::/?!:///{0,6}[0-9a-f]{1,4}/?
/
/?://?:1/?:2[0-7]|[01]\d/|\d\d?//? # With an optional CIDR routing prefix /0-128/
\s* # Trailing whitespace
$"""


我也收集了一个剧本 Python, 检查所有这些示例 IPv6; 他在
http://pastebin.com/TKLfQUG0
, 因为他太大了在这里发表他。

您可以使用测试结果和示例的参数运行脚本 "[result]=[example]", 因为:


python script.py Fail=::1.2.3.4: pass=::127.0.0.1 false=::: True=::1


或者您可以在不指向任何参数的情况下启动所有测试,因此:


python script.py


无论如何,我希望这将帮助别人!

快网

赞同来自:

考虑地址 IPv4 作为 "ip".


if re.match/r'^//\d{1,2}|1\d{2}|2[0-4]\d|25[0-5]/\./{3}/\d{1,2}|1\d{2}|2[0-4]\d|25[0-5]/$', ip/: 
print "Valid IP"
else:
print "Invalid IP"

君笑尘

赞同来自:

我发明了这个简单版本


def ip_checkv4/ip/:
parts=ip.split/"."/
if len/parts/<4 or len/parts/>4:
return "invalid IP length should be 4 not greater or less than 4"
else:
while len/parts/== 4:
a=int/parts[0]/
b=int/parts[1]/
c=int/parts[2]/
d=int/parts[3]/
if a<= 0 or a == 127 :
return "invalid IP address"
elif d == 0:
return "host id should not be 0 or less than zero "
elif a>=255:
return "should not be 255 or greater than 255 or less than 0 A"
elif b>=255 or b<0:
return "should not be 255 or greater than 255 or less than 0 B"
elif c>=255 or c<0:
return "should not be 255 or greater than 255 or less than 0 C"
elif d>=255 or c<0:
return "should not be 255 or greater than 255 or less than 0 D"
else:
return "Valid IP address ", ip

p=raw_input/"Enter IP address"/
print ip_checkv4/p/

三叔

赞同来自:

我只需要拆卸地址 IP v4. 我基于寒意战略的决定应该:

def getIP//:
valid = False
while not valid :
octets = raw_input/ "Remote Machine IP Address:" /.strip//.split/"."/
try: valid=len/ filter/ lambda/item/:0<=int/item/<256, octets/ / == 4
except: valid = False
return ".".join/ octets /

要回复问题请先登录注册