V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
kernelpanic
V2EX  ›  Linux

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

  •  
  •   kernelpanic · 2023-04-15 14:42:41 +08:00 · 2870 次点击
    这是一个创建于 580 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 也是这样
    

    有没有人知道咋回事?

    18 条回复    2023-04-18 15:44:33 +08:00
    lwjef
        1
    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
        2
    seashell2000  
       2023-04-15 14:52:12 +08:00   ❤️ 1
    use pac
    kernelpanic
        3
    kernelpanic  
    OP
       2023-04-15 14:59:59 +08:00
    @lwjef 把虚拟网卡加入到 ip netns 就断网了,这种方式应该可以就是不知道怎么配置
    kernelpanic
        4
    kernelpanic  
    OP
       2023-04-15 15:03:41 +08:00
    @seashell2000 我要的效果是 20 个 Puppeteer 爬虫分别使用 20 个虚拟网卡。。pac 应该做不到
    Puteulanus
        5
    Puteulanus  
       2023-04-15 15:06:00 +08:00
    跑一个指定网卡的 socks 代理,然后浏览器设置用那个代理?
    DefoliationM
        6
    DefoliationM  
       2023-04-15 15:06:51 +08:00
    linux 可以用 cgroup 分流一下,通过浏览器的 pid 或者使用不同用户运行浏览器。
    0o0O0o0O0o
        7
    0o0O0o0O0o  
       2023-04-15 15:28:34 +08:00 via iPhone
    #5 #6 的方案都可以
    leonshaw
        8
    leonshaw  
       2023-04-15 15:32:27 +08:00 via Android
    静态链接的?改成 ptrace syscall 试试。
    leonshaw
        9
    leonshaw  
       2023-04-15 15:37:13 +08:00 via Android
    或者按用户打 mark 配路由策略。
    xxb
        10
    xxb  
       2023-04-15 15:37:56 +08:00
    跑 20 個 docker ,分別 20 個 ip 和 mac
    akira
        11
    akira  
       2023-04-15 16:08:53 +08:00
    考虑下分别给代理软件绑定网卡,然后浏览器指定不同的代理端口?
    kernelpanic
        12
    kernelpanic  
    OP
       2023-04-15 17:28:57 +08:00
    找到原因了。。。Puppeteer 加一个--allow-unsecure-dlls 参数就可以了。。。。
    iutopia
        13
    iutopia  
       2023-04-15 21:17:49 +08:00
    windows 怎么处理?
    kernelpanic
        14
    kernelpanic  
    OP
       2023-04-15 21:27:31 +08:00
    ch2
        15
    ch2  
       2023-04-16 13:17:03 +08:00
    你这个用 docker 就行了,每个容器改各自的路由表
    huangmingyou
        16
    huangmingyou  
       2023-04-17 16:31:24 +08:00
    用 netns 加 macvlan 可以实现
    iutopia
        17
    iutopia  
       2023-04-18 09:00:36 +08:00
    @kernelpanic #14 realease 空了呀。
    iutopia
        18
    iutopia  
       2023-04-18 15:44:33 +08:00
    @kernelpanic #14 经过测试,blind 之后,被绑定的浏览器并没有从指定的网卡里面走数据。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4640 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 09:49 · PVG 17:49 · LAX 01:49 · JFK 04:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.