C语言 Linux内核设置套接字出端口



我正试图将多路径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);

我的问题是:我如何在内核级别手动设置套接字的输出端口,和/或在此调用序列中设置端口的位置,以便我可以修改它?

您可以将loc_in结构中的出端口设置为bind(),将套接字设置为本地适配器/接口,例如:

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("...");