Update fw_filter.sh

This commit is contained in:
Sofia
2026-01-19 10:05:01 +08:00
committed by GitHub
parent 48ee1ba07b
commit 950afe955d

View File

@@ -221,88 +221,100 @@ set_cust_host_ipv4() { #自定义ipv4透明路由网段
;; ;;
esac esac
} }
fw_filter_lan() { #局域网设备过滤
# 局域网设备过滤
fw_filter_lan() {
get_devinfo() { get_devinfo() {
dev_ip=$(cat $dhcpdir | grep " $dev " | awk '{print $3}') && [ -z "$dev_ip" ] && dev_ip=$dev dev_ip=$(cat "$dhcpdir" | grep " $dev " | awk '{print $3}') && [ -z "$dev_ip" ] && dev_ip=$dev
dev_mac=$(cat $dhcpdir | grep " $dev " | awk '{print $2}') && [ -z "$dev_mac" ] && dev_mac=$dev dev_mac=$(cat "$dhcpdir" | grep " $dev " | awk '{print $2}') && [ -z "$dev_mac" ] && dev_mac=$dev
dev_name=$(cat $dhcpdir | grep " $dev " | awk '{print $4}') && [ -z "$dev_name" ] && dev_name='未知设备' dev_name=$(cat "$dhcpdir" | grep " $dev " | awk '{print $4}') && [ -z "$dev_name" ] && dev_name='未知设备'
} }
add_mac() { add_mac() {
while true; do
echo "-----------------------------------------------" echo "-----------------------------------------------"
echo 已添加的mac地址 echo "已添加的mac地址"
cat "$CRASHDIR"/configs/mac 2>/dev/null cat "$CRASHDIR"/configs/mac 2>/dev/null
echo "-----------------------------------------------" echo "-----------------------------------------------"
echo -e "\033[33m序号 设备IP 设备mac地址 设备名称\033[32m" echo -e "\033[33m序号 设备IP 设备mac地址 设备名称\033[32m"
cat $dhcpdir | awk '{print " "NR" "$3,$2,$4}' cat "$dhcpdir" | awk '{print " "NR" "$3,$2,$4}'
echo -e "\033[0m-----------------------------------------------" echo -e "\033[0m-----------------------------------------------"
echo -e "手动输入mac地址时仅支持\033[32mxx:xx:xx:xx:xx:xx\033[0m的形式" echo -e "手动输入mac地址时仅支持\033[32mxx:xx:xx:xx:xx:xx\033[0m的形式"
echo -e " 0 或回车 结束添加" echo -e " 0 或回车 结束添加"
echo "-----------------------------------------------" echo "-----------------------------------------------"
read -p "请输入对应序号或直接输入mac地址 > " num read -r -p "请输入对应序号或直接输入mac地址 > " num
if [ -z "$num" -o "$num" = 0 ]; then if [ -z "$num" ] || [ "$num" = 0 ]; then
i= i=
elif [ -n "$(echo $num | grep -aE '^([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2})$')" ]; then break
elif echo "$num" | grep -aEq '^([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2})$'; then
if [ -z "$(cat "$CRASHDIR"/configs/mac | grep -E "$num")" ]; then if [ -z "$(cat "$CRASHDIR"/configs/mac | grep -E "$num")" ]; then
echo $num | grep -oE '^([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2})$' >>"$CRASHDIR"/configs/mac echo "$num" | grep -oE '^([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2})$' >>"$CRASHDIR"/configs/mac
else else
echo "-----------------------------------------------" echo "-----------------------------------------------"
echo -e "\033[31m已添加的设备请勿重复添加\033[0m" echo -e "\033[31m已添加的设备请勿重复添加\033[0m"
sleep 1
fi fi
add_mac elif [ "$num" -le $(cat $dhcpdir 2>/dev/null | awk 'END{print NR}') ]; then
elif [ $num -le $(cat $dhcpdir 2>/dev/null | awk 'END{print NR}') ]; then macadd=$(cat "$dhcpdir" | awk '{print $2}' | sed -n "$num"p)
macadd=$(cat $dhcpdir | awk '{print $2}' | sed -n "$num"p)
if [ -z "$(cat "$CRASHDIR"/configs/mac | grep -E "$macadd")" ]; then if [ -z "$(cat "$CRASHDIR"/configs/mac | grep -E "$macadd")" ]; then
echo $macadd >>"$CRASHDIR"/configs/mac echo "$macadd" >>"$CRASHDIR"/configs/mac
else else
echo "-----------------------------------------------" echo "-----------------------------------------------"
echo -e "\033[31m已添加的设备请勿重复添加\033[0m" echo -e "\033[31m已添加的设备请勿重复添加\033[0m"
sleep 1
fi fi
add_mac
else else
echo "-----------------------------------------------" echo "-----------------------------------------------"
echo -e "\033[31m输入有误请重新输入\033[0m" echo -e "\033[31m输入有误请重新输入\033[0m"
add_mac sleep 1
fi fi
done
} }
add_ip() { add_ip() {
while true; do
echo "-----------------------------------------------" echo "-----------------------------------------------"
echo "已添加的IP地址(段)" echo "已添加的IP地址(段)"
cat "$CRASHDIR"/configs/ip_filter 2>/dev/null cat "$CRASHDIR"/configs/ip_filter 2>/dev/null
echo "-----------------------------------------------" echo "-----------------------------------------------"
echo -e "\033[33m序号 设备IP 设备名称\033[32m" echo -e "\033[33m序号 设备IP 设备名称\033[32m"
cat $dhcpdir | awk '{print " "NR" "$3,$4}' cat "$dhcpdir" | awk '{print " "NR" "$3,$4}'
echo -e "\033[0m-----------------------------------------------" echo -e "\033[0m-----------------------------------------------"
echo -e "手动输入时仅支持\033[32m 192.168.1.0/24\033[0m 或 \033[32m192.168.1.0\033[0m 的形式" echo -e "手动输入时仅支持\033[32m 192.168.1.0/24\033[0m 或 \033[32m192.168.1.0\033[0m 的形式"
echo -e "不支持ipv6地址过滤如有需求请使用mac地址过滤" echo -e "不支持ipv6地址过滤如有需求请使用mac地址过滤"
echo -e " 0 或回车 结束添加" echo -e " 0 或回车 结束添加"
echo "-----------------------------------------------" echo "-----------------------------------------------"
read -p "请输入对应序号或直接输入IP地址段 > " num read -r -p "请输入对应序号或直接输入IP地址段 > " num
if [ -z "$num" -o "$num" = 0 ]; then if [ -z "$num" ] || [ "$num" = 0 ]; then
i= i=
elif [ -n "$(echo $num | grep -aE '^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(/(3[0-2]|[12]?[0-9]))?$')" ]; then break
elif echo "$num" | grep -aEq '^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(/(3[0-2]|[12]?[0-9]))?$'; then
if [ -z "$(cat "$CRASHDIR"/configs/ip_filter | grep -E "$num")" ]; then if [ -z "$(cat "$CRASHDIR"/configs/ip_filter | grep -E "$num")" ]; then
echo $num | grep -oE '^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(/(3[0-2]|[12]?[0-9]))?$' >>"$CRASHDIR"/configs/ip_filter echo "$num" | grep -oE '^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(/(3[0-2]|[12]?[0-9]))?$' >>"$CRASHDIR"/configs/ip_filter
else else
echo "-----------------------------------------------" echo "-----------------------------------------------"
echo -e "\033[31m已添加的地址请勿重复添加\033[0m" echo -e "\033[31m已添加的地址请勿重复添加\033[0m"
sleep 1
fi fi
add_ip elif [ "$num" -le "$(cat "$dhcpdir" 2>/dev/null | awk 'END{print NR}')" ]; then
elif [ $num -le $(cat $dhcpdir 2>/dev/null | awk 'END{print NR}') ]; then ipadd=$(cat "$dhcpdir" | awk '{print $3}' | sed -n "$num"p)
ipadd=$(cat $dhcpdir | awk '{print $3}' | sed -n "$num"p)
if [ -z "$(cat "$CRASHDIR"/configs/mac | grep -E "$ipadd")" ]; then if [ -z "$(cat "$CRASHDIR"/configs/mac | grep -E "$ipadd")" ]; then
echo $ipadd >>"$CRASHDIR"/configs/ip_filter echo "$ipadd" >>"$CRASHDIR"/configs/ip_filter
else else
echo "-----------------------------------------------" echo "-----------------------------------------------"
echo -e "\033[31m已添加的地址请勿重复添加\033[0m" echo -e "\033[31m已添加的地址请勿重复添加\033[0m"
sleep 1
fi fi
add_ip
else else
echo "-----------------------------------------------" echo "-----------------------------------------------"
echo -e "\033[31m输入有误请重新输入\033[0m" echo -e "\033[31m输入有误请重新输入\033[0m"
add_ip sleep 1
fi fi
done
} }
del_all() { del_all() {
while true; do
echo "-----------------------------------------------" echo "-----------------------------------------------"
if [ -z "$(cat "$CRASHDIR"/configs/mac "$CRASHDIR"/configs/ip_filter 2>/dev/null)" ]; then if [ -z "$(cat "$CRASHDIR"/configs/mac "$CRASHDIR"/configs/ip_filter 2>/dev/null)" ]; then
echo -e "\033[31m列表中没有需要移除的设备\033[0m" echo -e "\033[31m列表中没有需要移除的设备\033[0m"
@@ -318,29 +330,33 @@ fw_filter_lan() { #局域网设备过滤
done done
echo "-----------------------------------------------" echo "-----------------------------------------------"
echo -e "\033[0m 0 或回车 结束删除" echo -e "\033[0m 0 或回车 结束删除"
read -p "请输入需要移除的设备的对应序号 > " num read -r -p "请输入需要移除的设备的对应序号 > " num
mac_filter_rows=$(cat "$CRASHDIR"/configs/mac 2>/dev/null | wc -l) mac_filter_rows=$(cat "$CRASHDIR"/configs/mac 2>/dev/null | wc -l)
ip_filter_rows=$(cat "$CRASHDIR"/configs/ip_filter 2>/dev/null | wc -l) ip_filter_rows=$(cat "$CRASHDIR"/configs/ip_filter 2>/dev/null | wc -l)
if [ -z "$num" ] || [ "$num" -le 0 ]; then if [ -z "$num" ] || [ "$num" -le 0 ]; then
n= n=
elif [ $num -le $mac_filter_rows ]; then break
elif [ "$num" -le "$mac_filter_rows" ]; then
sed -i "${num}d" "$CRASHDIR"/configs/mac sed -i "${num}d" "$CRASHDIR"/configs/mac
echo "-----------------------------------------------" echo "-----------------------------------------------"
echo -e "\033[32m对应设备已移除\033[0m" echo -e "\033[32m对应设备已移除\033[0m"
del_all sleep 1
elif [ $num -le $((mac_filter_rows + ip_filter_rows)) ]; then elif [ "$num" -le $((mac_filter_rows + ip_filter_rows)) ]; then
num=$((num - mac_filter_rows)) num=$((num - mac_filter_rows))
sed -i "${num}d" "$CRASHDIR"/configs/ip_filter sed -i "${num}d" "$CRASHDIR"/configs/ip_filter
echo "-----------------------------------------------" echo "-----------------------------------------------"
echo -e "\033[32m对应设备已移除\033[0m" echo -e "\033[32m对应设备已移除\033[0m"
del_all sleep 1
else else
echo "-----------------------------------------------" echo "-----------------------------------------------"
echo -e "\033[31m输入有误请重新输入\033[0m" echo -e "\033[31m输入有误请重新输入\033[0m"
del_all sleep 1
fi fi
fi fi
done
} }
while true; do
echo "-----------------------------------------------" echo "-----------------------------------------------"
[ -z "$dhcpdir" ] && [ -f /var/lib/dhcp/dhcpd.leases ] && dhcpdir='/var/lib/dhcp/dhcpd.leases' [ -z "$dhcpdir" ] && [ -f /var/lib/dhcp/dhcpd.leases ] && dhcpdir='/var/lib/dhcp/dhcpd.leases'
[ -z "$dhcpdir" ] && [ -f /var/lib/dhcpd/dhcpd.leases ] && dhcpdir='/var/lib/dhcpd/dhcpd.leases' [ -z "$dhcpdir" ] && [ -f /var/lib/dhcpd/dhcpd.leases ] && dhcpdir='/var/lib/dhcpd/dhcpd.leases'
@@ -355,7 +371,7 @@ fw_filter_lan() { #局域网设备过滤
fw_filter_lan_over='黑名单' fw_filter_lan_over='黑名单'
fw_filter_lan_scrip='' fw_filter_lan_scrip=''
fi fi
######
echo -e "\033[30;47m请在此添加或移除设备\033[0m" echo -e "\033[30;47m请在此添加或移除设备\033[0m"
echo -e "当前过滤方式为:\033[33m$fw_filter_lan_type模式\033[0m" echo -e "当前过滤方式为:\033[33m$fw_filter_lan_type模式\033[0m"
echo -e "仅列表内设备流量\033[36m$fw_filter_lan_scrip经过\033[0m内核" echo -e "仅列表内设备流量\033[36m$fw_filter_lan_scrip经过\033[0m内核"
@@ -379,37 +395,37 @@ fw_filter_lan() { #局域网设备过滤
echo -e " 4 \033[36m移除指定设备\033[0m" echo -e " 4 \033[36m移除指定设备\033[0m"
echo -e " 9 \033[31m清空整个列表\033[0m" echo -e " 9 \033[31m清空整个列表\033[0m"
echo -e " 0 返回上级菜单" echo -e " 0 返回上级菜单"
read -p "请输入对应数字 > " num read -r -p "请输入对应数字 > " num
case "$num" in case "$num" in
0) ;; "" | 0)
break
;;
1) 1)
macfilter_type=$fw_filter_lan_over macfilter_type=$fw_filter_lan_over
setconfig macfilter_type $macfilter_type setconfig macfilter_type $macfilter_type
echo "-----------------------------------------------" echo "-----------------------------------------------"
echo -e "\033[32m已切换为$fw_filter_lan_type模式\033[0m" echo -e "\033[32m已切换为$fw_filter_lan_type模式\033[0m"
fw_filter_lan
;; ;;
2) 2)
add_mac add_mac
fw_filter_lan
;; ;;
3) 3)
add_ip add_ip
fw_filter_lan
;; ;;
4) 4)
del_all del_all
fw_filter_lan
;; ;;
9) 9)
: >"$CRASHDIR"/configs/mac : >"$CRASHDIR"/configs/mac
: >"$CRASHDIR"/configs/ip_filter : >"$CRASHDIR"/configs/ip_filter
echo "-----------------------------------------------" echo "-----------------------------------------------"
echo -e "\033[31m设备列表已清空\033[0m" echo -e "\033[31m设备列表已清空\033[0m"
fw_filter_lan sleep 1
;; ;;
*) *)
errornum errornum
sleep 1
;; ;;
esac esac
done
} }