在 Linux 内核中设置套接字传出端口号
Setting socket outgoing port number in Linux kernel
我正在尝试将多路径 tcp (https://www.multipath-tcp.org/) 集成到一个项目中,我想修改源代码以便为新的 mptcp 子流手动选择传出套接字端口,以便我可以识别在我的应用程序中进出的数据包。
地址是通过以下方式创建的:
inet_create(sock_net(meta_sk), &sock, IPPROTO_TCP, 1);
并绑定:
sock.ops->bind(&sock, (struct sockaddr *)&loc_in, sizeof(struct sockaddr_in));
然后连接:
sock.ops->connect(&sock, (struct sockaddr *)&rem_in,
sizeof(struct sockaddr_in), O_NONBLOCK);
我的问题是:如何在内核级别手动设置socket的输出端口,and/or这个调用序列中设置的端口在哪里,所以我可以修改它?
您可以在 loc_in
结构中将传出端口设置为 bind()
套接字到本地 adapter/interface,例如:
struct sockaddr_in loc_in;
loc_in.sin_family = AF_INET;
// desired port...
loc_in.sin_port = htons(...);
// IP of desired adapter to connect() from...
loc_in.sin_addr.s_addr = inet_addr("...");
我正在尝试将多路径 tcp (https://www.multipath-tcp.org/) 集成到一个项目中,我想修改源代码以便为新的 mptcp 子流手动选择传出套接字端口,以便我可以识别在我的应用程序中进出的数据包。
地址是通过以下方式创建的:
inet_create(sock_net(meta_sk), &sock, IPPROTO_TCP, 1);
并绑定:
sock.ops->bind(&sock, (struct sockaddr *)&loc_in, sizeof(struct sockaddr_in));
然后连接:
sock.ops->connect(&sock, (struct sockaddr *)&rem_in,
sizeof(struct sockaddr_in), O_NONBLOCK);
我的问题是:如何在内核级别手动设置socket的输出端口,and/or这个调用序列中设置的端口在哪里,所以我可以修改它?
您可以在 loc_in
结构中将传出端口设置为 bind()
套接字到本地 adapter/interface,例如:
struct sockaddr_in loc_in;
loc_in.sin_family = AF_INET;
// desired port...
loc_in.sin_port = htons(...);
// IP of desired adapter to connect() from...
loc_in.sin_addr.s_addr = inet_addr("...");