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 也是这样
有没有人知道咋回事?