目前的环境是这样的, 在局域网内有部署有一个 HTTP 服务, 现在需要写一个程序去爬里面的内容, 但是需要做到在给定的一组 IP 内切换, 如 HTTP 服务是在 10.0.10.11 上, 爬虫程序部署在 10.0.11.31 上面, 可以设置的一组 IP 是 10.0.11.31-33 共 3 个 IP, 但是爬虫只能部署在 31 上面, 服务器是 linux, 请问可以怎么做? 谢谢.
感谢@defunct9 提供的方案.
通过ip alias能做到一个网卡多个IP地址.
然后在爬虫程序设置路由规则即可.
我是java用个的httpclient设置setRoutePlanner即可完成;
// 根据指定IP地址做出口创建httpclient private static CloseableHttpClient client(final byte[] ip) { final RequestConfig.Builder builder = RequestConfig.copy(defaultConfig); // builder.setRedirectsEnabled(false); return HttpClientBuilder.create().setDefaultRequestConfig(builder.build()) .setRoutePlanner(new DefaultRoutePlanner(DefaultSchemePortResolver.INSTANCE) { @SneakyThrows @Override protected InetAddress determineLocalAddress(HttpHost firstHop, HttpContext context) throws HttpException { return InetAddress.getByAddress(ip); } }) .build(); }
1 lcy630409 2022-08-26 11:08:01 +08:00 写个 bash 脚本切换 ip ,定时执行? |
![]() | 2 defunct9 2022-08-26 11:24:09 +08:00 via iPhone ![]() 做两个网卡 alias 不就行了 |
![]() | 4 defunct9 2022-08-27 22:33:15 +08:00 via iPhone 你爬虫程序得改啊,不指定肯定从缺省的 31 地址出去 |