怎样让浏览器使用指定的网卡?

2023-04-15 14:42:41 +08:00
 kernelpanic

curl 可以用下面的方式通过指定的网卡发送数据

curl --interface tun0 httpbin.org/ip

浏览器有没有类似的方式?找了半天,发现一个 hook 的方式

#include <sys/socket.h>

#define IFACE_NAME "wl0"

int connect(int fd, const struct sockaddr *daddr, socklen_t addrlen)
{
        int ret;

        if (daddr->sa_family == AF_INET)
                setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, IFACE_NAME,
                           sizeof(IFACE_NAME));

        __asm__ volatile (
                "syscall"
                : [eax]"=a"(ret)
                : [rax]"a"(42), [rdi]"D"(fd), [rsi]"S"(daddr),
                  [rdx]"d"(addrlen)
                : "rcx", "r11", "memory"
        );

        return ret;
}
gcc -fpic -fPIC -Wall -Wextra -shared -O3 connect.c -o connect.so

export LD_PRELOAD="/tmp/connect.so" curl httpbin.org/ip
#这样对 curl 是有效的,但是对 chrome 无效
export LD_PRELOAD="/tmp/connect.so" /opt/google/chrome/chrome --headless --disable-gpu --dump-dom --no-sandbox
#用 root 也无效,firefox 也是这样

有没有人知道咋回事?

2588 次点击
所在节点    Linux
18 条回复
lwjef
2023-04-15 14:50:05 +08:00
这个是你要的吗
routing - Bind unix program to specific network interface - Unix & Linux Stack Exchange
https://unix.stackexchange.com/questions/210982/bind-unix-program-to-specific-network-interface
seashell2000
2023-04-15 14:52:12 +08:00
use pac
kernelpanic
2023-04-15 14:59:59 +08:00
@lwjef 把虚拟网卡加入到 ip netns 就断网了,这种方式应该可以就是不知道怎么配置
kernelpanic
2023-04-15 15:03:41 +08:00
@seashell2000 我要的效果是 20 个 Puppeteer 爬虫分别使用 20 个虚拟网卡。。pac 应该做不到
Puteulanus
2023-04-15 15:06:00 +08:00
跑一个指定网卡的 socks 代理,然后浏览器设置用那个代理?
DefoliationM
2023-04-15 15:06:51 +08:00
linux 可以用 cgroup 分流一下,通过浏览器的 pid 或者使用不同用户运行浏览器。
0o0O0o0O0o
2023-04-15 15:28:34 +08:00
#5 #6 的方案都可以
leonshaw
2023-04-15 15:32:27 +08:00
静态链接的?改成 ptrace syscall 试试。
leonshaw
2023-04-15 15:37:13 +08:00
或者按用户打 mark 配路由策略。
xxb
2023-04-15 15:37:56 +08:00
跑 20 個 docker ,分別 20 個 ip 和 mac
akira
2023-04-15 16:08:53 +08:00
考虑下分别给代理软件绑定网卡,然后浏览器指定不同的代理端口?
kernelpanic
2023-04-15 17:28:57 +08:00
找到原因了。。。Puppeteer 加一个--allow-unsecure-dlls 参数就可以了。。。。
iutopia
2023-04-15 21:17:49 +08:00
windows 怎么处理?
kernelpanic
2023-04-15 21:27:31 +08:00
ch2
2023-04-16 13:17:03 +08:00
你这个用 docker 就行了,每个容器改各自的路由表
huangmingyou
2023-04-17 16:31:24 +08:00
用 netns 加 macvlan 可以实现
iutopia
2023-04-18 09:00:36 +08:00
@kernelpanic #14 realease 空了呀。
iutopia
2023-04-18 15:44:33 +08:00
@kernelpanic #14 经过测试,blind 之后,被绑定的浏览器并没有从指定的网卡里面走数据。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/932747

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX