cas*_*mcl 31 regex private ip-address
我想知道这是否是匹配以私有IP地址(Perl风格的Regex)开头的字符串的最佳方式:
(^127\.0\.0\.1)|(^192\.168)|(^10\.)|(^172\.1[6-9])|(^172\.2[0-9])|(^172\.3[0-1])
Run Code Online (Sandbox Code Playgroud)
非常感谢!
Mar*_*ers 53
我假设你想匹配这些范围:
127. 0.0.0 – 127.255.255.255 127.0.0.0 /8 10. 0.0.0 – 10.255.255.255 10.0.0.0 /8 172. 16.0.0 – 172. 31.255.255 172.16.0.0 /12 192.168.0.0 – 192.168.255.255 192.168.0.0 /16
你错过了一些可能导致它接受的点,172.169.0.0即使这不应该被接受.我在下面修了它.删除新行,只是为了便于阅读.
(^127\.)|
(^10\.)|
(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|
(^192\.168\.)
Run Code Online (Sandbox Code Playgroud)
另请注意,这假设IP地址已经过验证 - 它接受类似的内容10.foobar.
Edw*_*ard 18
这与Mark的正确答案相同,但现在包括IPv6私有地址.
/(^127\.)|(^192\.168\.)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^::1$)|(^[fF][cCdD])/
Run Code Online (Sandbox Code Playgroud)
小智 10
我已经生成了这个
CLEX A NETWORKS的REGEXP:
(10)(\.([2]([0-5][0-5]|[01234][6-9])|[1][0-9][0-9]|[1-9][0-9]|[0-9])){3}
B类网络的REGEXP:
(172)\.(1[6-9]|2[0-9]|3[0-1])(\.(2[0-4][0-9]|25[0-5]|[1][0-9][0-9]|[1-9][0-9]|[0-9])){2}
C类网络的REGEXP:
(192)\.(168)(\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])){2}
如果您遇到任何错误,请告诉我
如果您确定输出(例如netstat)并且您不需要检查IP地址有效性,因为它已经完成,那么您可以使用此公式捕获私有IP地址
grep -P"(10.| 192.168 | 172.1 [6-9].| 172.2 [0-9].| 172.3 [01].).*"
这是我在 python 中使用的:
rfc1918 = re.compile('^(10(\.(25[0-5]|2[0-4][0-9]|1[0-9]{1,2}|[0-9]{1,2})){3}|((172\.(1[6-9]|2[0-9]|3[01]))|192\.168)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{1,2}|[0-9]{1,2})){2})$')
Run Code Online (Sandbox Code Playgroud)
如果您愿意,可以删除 ^ 和/或 $ 锚点。
我更喜欢上面的正则表达式,因为它会清除无效的八位字节(任何高于 255 的字节)。
用法示例:
if rfc1918.match(ip):
print "ip is private"
Run Code Online (Sandbox Code Playgroud)