c - 在建立连接之前检索本地 IP

标签 c linux networking tcp routing

我正在尝试使用 C 来确定哪个本地 IP 将在套接字上用于与 Linux 上给定主机的 TCP 连接。

我举个例子。我可以连接我的套接字并在文件描述符上使用 getsockname() 来获取本地 ip(和本地 TCP 端口);但是我可以在不打开连接的情况下执行此操作吗?

我可以读取路由表并据此做出决定 - 但网络子系统必须已经具有该算法,以便连接实际打开。简而言之,我想知道是否有一个 API 可以访问路由算法,而无需自己解析规则或打开实际连接。解决方案 - 如果有的话 - 可能只是 Linux,但没关系。

编辑:IRC 上有人建议我创建一个 UDP 套接字并在其上使用 connect()。那时没有使用网络,但我应该可以在上面使用 getsockname()

最佳答案

我知道的唯一解决方案是 traceroute 的作用。发送一个 TTL 为 1 的数据包,看看 ICMP 返回的是哪个接口(interface)。我记得不同主机之间存在很多不兼容问题,因此您可能需要发送/接收几种不同类型的消息才能获取所需数据。

关于c - 在建立连接之前检索本地 IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17457266/

相关文章:

wprintf 生成的列不相等

c - 无法弄清楚这个 c 语法是什么

php - htaccess 将 wordpress 重定向到 index2.php

c# - 如何将 WEP key 转换为 ASCII 密码?

android - 如何在我的应用程序 android 上检查我的互联网访问

c++ - C/C++ 中 char *(字符指针)的大小会有所不同吗? - 用于数据库列固定大小

c - 是否有任何 c 到字节码编译器?

linux - 每个进程都有自己的内核堆栈,对吧?

linux - 来自 Assembly 的 sys_execve 系统调用

java - Socket是否开启另一个线程?它会返回一些东西吗?