ip范围

看到一个判断ip的帖子,应该会有用吧。

有如下两个文本文件(IPlist.txt和IPsegment.txt),IPlist.txt包含有一些网站的IP地址,如何编程判断这些IP地址是否属于IPsegment.txt所列的网段中。
匹配的结果输出到文本文件matchinglist.txt中。

三个文件的格式如下:
IPlist.txt
www.yahoo.com,66.94.230.51
www.baidu.com,202.108.250.249
www.sina.com.cn,61.135.152.77
www.sohu.com,61.135.150.75

IPsegment.txt
219.111.192.0/18
68.132.0.0/17
61.135.0.0/16
192.162.0.0/16
152.172.0.0/16
34.132.0.0/14
97.208.0.0/13

matchinglist.txt
www.sina.com.cn,61.135.152.77

#!/usr/bin/perl
open(FF,"IPlist.txt");
my %name;
my %net;
while(<FF>){
s/[\015\012]//;
my ($t1,$t2) = split(/,/);
$name{$t1} = $t2;
}
close(FF);
open(FF,"IPsegment.txt");

while(<FF>){
s/[\015\012]//;
my ($t1,$t2) = split(/\//);
$net{$t1} = $t2;
}
close(FF);
for $net (keys %net){
my $netmask = $net{$net};
my $net_bits1 = &bitsIP($net,$netmask);
for $name (keys %name){
my $net_bits2 = &bitsIP($name{$name},$netmask);
if($net_bits2 eq $net_bits1){
print "$name,".$name{$name}."\n";
next;
}
}
}

#--取得bits of net address
sub bitsIP(){
my($ip,$netmask)= @_;
my @ip =split(/,/,$ip);
my $b = unpack("B32", pack("C4",$ip[0],$ip[1],$ip[2],$ip[3]));
my $substr= substr($b,0,$netmask);
return $substr;
}

<think>我们被要求使用iptables添加一个IP地址范围的规则。根据引用[3],我们可以使用iprange模块来指定源IP范围或目标IP范围。 具体来说,使用`-m iprange`来加载iprange模块,然后使用`--src-range`指定源IP范围,或`--dst-range`指定目标IP范围。 格式:iptables [-t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转] 例如,我们要在INPUT链的filter表中添加一条规则,允许源IP地址范围从192.168.1.100到192.168.1.200的TCP流量访问本机的80端口: iptables -A INPUT -t filter -p tcp --dport 80 -m iprange --src-range 192.168.1.100-192.168.1.200 -j ACCEPT 注意:IP范围使用横线(-)连接起始IP和结束IP,中间不能有空格。 另外,根据引用[4],我们需要注意规则的添加位置(-A是追加在最后,-I是插入到最前面)。同时,确保没有其他规则(如DROP规则)在此之前拒绝了这些IP的访问,否则ACCEPT规则可能不会生效。 如果我们需要同时指定源IP范围和目标IP范围,可以同时使用`--src-range`和`--dst-range`。 步骤: 1. 确定要操作的链(如INPUT、OUTPUT、FORWARD)和表(默认为filter表,可以省略-t filter)。 2. 确定要插入(-I)还是追加(-A)规则。 3. 指定协议(-p)、端口(--dport或--sport)等条件。 4. 使用-m iprange加载模块,并用--src-range或--dst-range指定IP范围。 5. 指定目标动作(-j ACCEPT、DROP等)。 例如,禁止源IP范围192.168.20.10-192.168.20.19访问目标IP192.168.20.20的ICMP协议(如ping): iptables -A INPUT -p icmp -m iprange --src-range 192.168.20.10-192.168.20.19 --dst-range 192.168.20.20 -j DROP 注意:在INPUT链中,目标地址通常是本机,所以这里的目标地址范围就是本机的IP地址。 另外,添加规则后,如果需要永久保存,请根据引用[1]保存规则: sudo iptables-save > /etc/iptables/rules.v4 # 保存IPv4规则 sudo ip6tables-save > /etc/iptables/rules.v6 # 保存IPv6规则 请根据实际需求调整规则。</think>### iptables 添加 IP 范围规则指南 在 iptables 中添加 IP 地址范围规则,需要使用 `iprange` 扩展模块。以下是详细操作步骤: #### 1. **基本语法格式** ```bash iptables -A <链名> -t <表名> -p <协议> -m iprange --src-range <起始IP-结束IP> --dst-range <起始IP-结束IP> -j <动作> ``` - `-A`:追加规则到链尾(使用 `-I` 插入到链首) - `-t`:指定表(默认为 `filter` 表) - `-m iprange`:加载 IP 范围匹配模块 - `--src-range`:源 IP 范围(如 `192.168.1.100-192.168.1.200`) - `--dst-range`:目标 IP 范围(可选) - `-j`:执行动作(`ACCEPT`/`DROP`/`REJECT`) #### 2. **常用操作示例** - **允许指定源 IP 范围访问 TCP 端口**: ```bash iptables -A INPUT -p tcp --dport 80 -m iprange --src-range 10.0.0.10-10.0.0.50 -j ACCEPT ``` 允许 `10.0.0.10` 到 `10.0.0.50` 的 IP 访问本机 80 端口[^3]。 - **禁止 IP 范围访问特定服务**: ```bash iptables -A INPUT -p icmp -m iprange --src-range 192.168.1.100-192.168.1.200 -j DROP ``` 禁止该 IP 范围 ping 本机[^3]。 - **同时指定源和目标 IP 范围**: ```bash iptables -A FORWARD -p tcp -m iprange --src-range 172.16.0.1-172.16.0.50 --dst-range 10.0.0.1-10.0.0.10 -j ACCEPT ``` 允许转发指定源 IP 范围到目标 IP 范围的 TCP 流量[^3]。 #### 3. **关键注意事项** - **规则顺序**:iptables 规则按顺序匹配,建议将范围规则放在通用规则之前(使用 `-I` 而非 `-A`)[^4]。 - **永久保存规则**: ```bash iptables-save > /etc/iptables/rules.v4 # IPv4 ip6tables-save > /etc/iptables/rules.v6 # IPv6 ``` 否则重启后规则会丢失[^1]。 - **模块依赖**:确保系统已支持 `iprange` 模块(一般默认启用)。 #### 4. **验证规则** 查看已添加规则: ```bash iptables -L -n --line-numbers -v ``` 检查目标链中是否包含 `iprange` 模块的规则条目。 --- ### 常见问题排查 1. **规则不生效**: - 检查 IP 范围格式是否正确(不能有空格,如 `10.0.0.1-10.0.0.100`) - 确认规则位置是否被其他 `DROP` 规则覆盖 - 使用 `-I INPUT 1` 将规则插入链首测试 2. **模块未加载**: ```bash modprobe xt_iprange # 手动加载模块 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值