IPv6爬虫猛爬

IPv4的稀少让人很无奈,无法获得大量IP,而IPv6国家正大力推进,而且只要家里宽带支持ipv6,一般都会发下来最小一个/64段,大的可能给到/48甚至更大,同时,由于ipv6的海量性,除了依靠运营商提供外,还可以从不少的网站上直接申请到很大的一个ipv6段来使用,只不过要花点钱找支持bgp session的vps供应商,学习一堆相关的知识配置后才能使用。

受 zu1k 的 http-proxy-ipv6-pool的启发,结合我对于nodejs的理解,配置出了一个算是半起飞级别的爬虫。

本文将会简单介绍我在我的树莓派上配置ipv6爬虫的过程,从系统配置到删库跑路全过程。

首先,你需要确认你能够使用ipv6网络且有大段的ipv6使用,你可以在路由器上查找确认是否获得了公网ipv6地址,并有可用的公网ipv6 Lan前缀,如果你能够看到上面提到这些,并且能够在test-ipv6上去的10/10,那么恭喜你,你已经满足了一半的前提了。

然后,确认你的目标爬取站点是否支持ipv6,通常情况下,你只需要在命令行中打开nslookup,设置查询类型set type=AAAA,然后查询你所需要爬取的网站的域名,看返回的结果是否有ipv6地址,有的话,就满足另一半的前提了。

接下来是系统的配置工作,首先你需要安装一个ndppd,于是就sudo apt install ndppd,然后,因为我不会配置系统服务启动失败不影响重启,我是直接先systemctl stop ndppd,按需要去启动这个ndppd。ndppd的作用是向周围设备通报,我这里有这个段的地址,请把这些数据包发给我。我们首先创建一个ndppd的模板:

1
2
3
4
5
6
7
8
9
10
11
12
# /etc/ndppd.template.conf
route-ttl 30000

proxy eth0 {
router no
timeout 500
ttl 30000

rule 240e::1/64 {
static
}
}

然后我们编辑ndppd的服务脚本,我在他的启动部分增加了自动获取ipv6前缀并配置ndppd的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# /etc/init.d/ndppd
do_start()
{
sleep 5
ndppd_6=`ip -6 route | grep 240e | sed 's/::\/64.*$//g'`
log_daemon_msg "Grep IPv6 Prefix: $ndppd_6"
cat /etc/ndppd.template.conf | sed 's/240e::1/'$ndppd_6'/g' > /etc/ndppd.conf
ip -6 route add local "$ndppd_6"::/64 dev eth0
echo $ndppd_6:1794 > /etc/ndppd_ipv6_prefix.txt
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
|| return 1
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
$DAEMON_ARGS || return 2
}

完成这一步之后,我们只需要systemctl start ndppd就开始使用这个ipv6段了,我一般建议是比你路由器上的Lan前缀小一点,确保不会干扰到你正常的ipv6上网。

这时候我们可以使用curl来测试你的ipv6配置是否正确

这里我是用zulk的例子

1
2
3
4
5
$ curl --interface 2001:19f0:6001:48e4::1 ipv6.ip.sb
2001:19f0:6001:48e4::1

$ curl --interface 2001:19f0:6001:48e4::2 ipv6.ip.sb
2001:19f0:6001:48e4::2

我们可以看到成功返回了我们指定的地址。

接下来就是结合你自己的爬虫程序,设定好请求时的源IP即可。

通常来说,家宽会每隔24小时强制重新拨号一次,这种情况下,你只需要重新启动,然后使用 systemctl start ndppd 启动我们的ndppd 即可恢复正常的继续爬取网站。

这里有很多不规范的东西,欢迎私信告诉我怎么修改。