C - TCP 校验和(使用原始套接字)——如何获取 IP 地址

标签 c sockets tcp checksum

当使用raw sockets发送TCP数据时,允许将source ip address置零,这样内核就可以正确的值。这很有用,尤其是在使用多个接口(interface)(具有不同的 IP 地址)时。

我现在的问题是:要计算 TCP 校验和,我需要知道源 IP 地址最终是什么。这对我来说似乎是不可能的?

有没有办法确定我的传出数据包的源IP

(另一种方法是,将我的原始套接字专门绑定(bind)到一个地址,但我不想那样做)。

/编辑:使用 Linux

最佳答案

如果您不绑定(bind)套接字,内核必须根据目标地址找到源地址。

基本上完成路由查找并确定目标接口(interface)。之后,从该接口(interface)获取 IP:数据包的来源。

所以你的问题变成了执行路由查找,就像 ip route get 那样。

编辑

@nos 提到使用不同的套接字 (UDP) 并将其连接到该目标地址。使用 getsockname 获取它的本地绑定(bind)名称应该会为您提供将用于该目的地的源地址。

关于C - TCP 校验和(使用原始套接字)——如何获取 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6524868/

相关文章:

c - 使用 `GCCs` 预处理器作为汇编程序

ISO C89 中的函数调用计数

c# - 无法将套接字重新绑定(bind)到现有 IP/端口组合

c++ - 如何在 C++ 中使用 recv 或 read 函数从 tcp 套接字读取大请求?

javascript - 刷新页面时Socket.io多个连接

tcp - 我是使用 1 个端口进行 1000 个连接,还是使用 1000 个端口,每个端口有 1 个连接?

从矩阵计算列总计 - C 编程

c++ - 库构建系统是否应该默认关闭断言?

Java pcap 解析器解析为 ByteBuffer

linux - 如何通过linux命令获取某个接口(interface)的统计信息?