python3 -c 'from ipaddress import ip_address as IP; list(
map(print, ((startip, endip) for startip, endip, _ in
(ip.split("-") for ip in open("tmp/iplist.txt"))
if IP(startip) < IP("127.0.0.1") < IP(endip))))'
它实际上是以下脚本的单行版本:
import sys
from ipaddress import ip_address as IP
ip = IP(sys.argv[1])
with open(sys.argv[2]) as f:
for line in f:
startIp, endIp, _ = line.split('-')
if IP(startIp) < ip < IP(endIp):
print(line)
COMMAND USAGE
-------------
Usage:
grepcidr [-V] [-cCDvhais] PATTERN [FILE ...]
grepcidr [-V] [-V] [-cCDvhais] [-e PATTERN | -f FILE] [FILE ...]
Each pattern, whether on the command line or inside a file, may be:
CIDR format a.b.c.d/xx or aa:bb::cc::dd/xx
IP range a.b.c.d-e.f.g.h
Single IP a.b.c.d or aa:bb:cc::dd
6条答案
按热度按时间a1o7rhls1#
您可以使用
awk
来执行以下操作:在数组的BEGIN子句中,搜索的IP初始设置为数组,在for-cycle中比较每行,如果每个八位字节位于
startIp
和endIp
之间,则打印“匹配行”。一些Python 3乱码依赖于Python 3.3中的ipaddress模块(适用于Python 2.6/Python 2.7:
它实际上是以下脚本的单行版本:
可以这样使用:
lsmepo6l2#
试试这个:
调用此awk脚本(
checkIP.awk
),如下所示:nkoocmlb3#
您可以使用以下awk脚本:
ipval
将给定的IP地址转换为数值,以便可以使用算术运算符容易地进行比较。enyaitl34#
检查IP是否有效以及是否位于本地连接上:
e5nqia275#
我发现上面脚本的这个变体更有用:
2w3kk1z56#
grepcidr
命令行工具可以帮助完成此类任务。