c - 在Linux内核中设置socket输出端口号

标签 c sockets tcp linux-kernel mptcp

我正在尝试将多路径 tcp ( https://www.multipath-tcp.org/ ) 集成到一个项目中,我想修改源代码以便为新的 mptcp 子流手动选择传出套接字端口,以便我可以识别正在发送的数据包在我的应用程序中进出。

地址是用:

inet_create(sock_net(meta_sk), &sock, IPPROTO_TCP, 1);

和绑定(bind):

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() 设置为本地适配器/接口(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("...");

关于c - 在Linux内核中设置socket输出端口号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38206890/

相关文章:

tcp - 允许 golang 通过 Windows 防火墙进行测试

node.js - 是否可以在 NodeJS 的 net 'data' 事件上设置最大字节数?

c - 使用 GDB 进行 Eclipse C/C++ 调试

c - 使用指针将嵌套结构传递给函数

c - 按位运算?

c - Essentia Music Extractor命令行程序的参数

c - 带有选择但客户端 block 的linux服务器

java - java战舰游戏建议

javascript - 如何将 Socket.io 与 MEAN 堆栈一起使用?

无数据发送的 60 字节的 Tcp 数据包