文章目录
脚本用法
示例:查询中国国际移动所有已向全球广播的ip段
./123 58453 #脚本名后 空格跟一个ASN
脚本内容
#!/bin/bash
# 获取ipv4 bgp路由表文件
# https://bgp.potaroo.net/as2.0/report.txt 这是一份分析报告
wget -O bgptable_v4.txt http://bgp.potaroo.net/as2.0/bgptable.txt
# 获取ipv6 bgp路由表文件
wget -O bgptable_v6.txt https://bgp.potaroo.net/v6/as2.0/bgptable.txt
# 将windows的文本转换为linux文本
dos2unix bgptable_v4.txt
dos2unix bgptable_v6.txt
# 注意要想grep能引用变量,必须使用双引号
# 先sed处理成有用的单行数据,grep 带入变量过滤出需要的数据,sort根据指定序列排序后,更加去重
# sed -n 's/\./-/6p' bgptable.txt | grep " $1 i$" | sort -u -k 2,2
附、处理ipv4路由表的命令(这是一条命令)
awk '
# 只要这一行出现 CIDR,就更新当前前缀
/\/[0-9]+/ {
for (i=1; i<=NF; i++) {
if ($i ~ /\/[0-9]+/) {
current_prefix = $i
break
}
}
}
# 遇到 best path
/^\*>/ {
line = $0
# 如果本行没有 CIDR,就补上当前前缀
has_cidr = 0
for (i=1; i<=NF; i++) {
if ($i ~ /\/[0-9]+/) {
has_cidr = 1
break
}
}
if (!has_cidr && current_prefix != "") {
sub(/^\*>[[:space:]]*/, "", line)
print "*> " current_prefix, line
} else {
print
}
}
' bgptable_v4.txt > bgptable_v4_new.txt
附、处理ipv6路由表的数据
## 第一步处理
awk '
/^[*]/ {
if (NR > 1) print rec
rec = $0
next
}
{
gsub(/^[[:space:]]+/, "", $0)
rec = rec " " $0
}
END {
if (rec) print rec
}
' bgptable_v6.txt > bgptable_v6_transit.txt
## 第二步处理
awk '
# 只要这一行出现 CIDR,就更新当前前缀
/\/[0-9]+/ {
for (i=1; i<=NF; i++) {
if ($i ~ /\/[0-9]+/) {
current_prefix = $i
break
}
}
}
# 遇到 best path
/^\*>/ {
line = $0
# 如果本行没有 CIDR,就补上当前前缀
has_cidr = 0
for (i=1; i<=NF; i++) {
if ($i ~ /\/[0-9]+/) {
has_cidr = 1
break
}
}
if (!has_cidr && current_prefix != "") {
sub(/^\*>[[:space:]]*/, "", line)
print "*> " current_prefix, line
} else {
print
}
}
' bgptable_v6_transit.txt > bgptable_v6_new.txt
## 删除多余文件,最后得到文件 bgptable_v6_new.txt
rm -rf bgptable_v6_transit.txt
附、如何保留如下格式字段(前缀,起始ASN)
## 数据示例
39.173.112.0/22,56041
39.173.116.0/22,56041
39.173.120.0/21,56041
## 分别处理 ipv4 和 ipv6
awk '{print $2 "," $(NF-1)}' bgptable_v4_new.txt > bgptable_v4_asn.txt
awk '{print $2 "," $(NF-1)}' bgptable_v6_new.txt > bgptable_v6_asn.txt
如果文章对你有帮助,欢迎点击上方按钮打赏作者
谢谢你请我吃辣条
暂无评论