特定接口上的TCP/IP连接
TCP/IP connection on a specific interface
我想使用两个网络路由之一连接到服务器。一个人会怎么做?我在谷歌上搜索了很多,通常的答案是篡改路由表,但这无济于事,因为目的地只有一个IP地址。大多数示例的特点是客户端只有一个网卡,服务器有多个NIC,但在这种情况下情况恰恰相反。
ForceBindIP应用程序似乎能够提供这种类型的功能,所以我想这一定是可能的。
+----->-------+
192.168.1.3 | B | 192.168.1.4
+--------+ +--------+ +--------+
| Client | | Switch |-->---| Server |
+--------+ +--------+ +--------+
192.168.1.2 | A |
+----->-------+
我很可能会使用C++和winsock来实现这一点。我需要能够随意打开给定路由上的连接(即,不能静态绑定到特定路由)。我将使用普通的旧TCP/IP。
编辑:Windows 7客户端
在调用connect()
、ConnectEx()
或WSAConnect()
之前,使用bind()
函数将套接字绑定到192.168.1.3
或192.168.1.2
。这告诉套接字用于传出连接的特定接口。例如:
SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
sockaddr_in localaddr = {0};
localaddr.sin_family = AF_INET;
localaddr.sin_addr.s_addr = inet_addr("192.168.1.3");
bind(s, (sockaddr*)&localaddr, sizeof(localaddr));
sockaddr_in remoteaddr = {0};
remoteaddr.sin_family = AF_INET;
remoteaddr.sin_addr.s_addr = inet_addr("192.168.1.4");
remoteaddr.sin_port = 12345; // whatever the server is listening on
connect(s, (sockaddr*)&remoteaddr, sizeof(remoteaddr));
或者:
addrinfo localhints = {0};
localhints.ai_flags = AI_NUMERICHOST | AI_NUMERICSERV;
localhints.ai_family = AF_INET;
localhints.ai_socktype = SOCK_STREAM;
localhints.ai_protocol = IPPROTO_TCP;
addrinfo *localaddr = NULL;
getaddrinfo("192.168.1.3", "0", &localhints, &localaddr);
bind(s, localaddr->ai_addr, localaddr->ai_addrlen);
freeaddrinfo(localaddr);
addrinfo remotehints = {0};
remotehints.ai_flags = AI_NUMERICHOST | AI_NUMERICSERV;
remotehints.ai_family = AF_INET;
remotehints.ai_socktype = SOCK_STREAM;
remotehints.ai_protocol = IPPROTO_TCP;
addrinfo *remoteaddr = NULL;
getaddrinfo("192.168.1.4", "12345", &remotehints, &remoteaddr);
connect(s, remoteaddr->ai_addr, remoteaddr->ai_addrlen);
freeaddrinfo(remoteaddr);
相关文章:
- 为什么 WinInet 在通过 FQDN 连接时无法通过协商自动进行身份验证,但如果通过 IP 连接则成功?
- C++ Winsock2 客户端未通过远程 IP 连接到服务器
- 使用 IP 帮助程序的 Windows 中活动 UDP 连接的远程地址
- 如何将请求的客户端连接的 IP 与 QTcpSocket 类中识别的 IP 之一进行比较?
- gRPC C++尝试在无法访问的 IP 上连接通道时阻止客户端
- TCP/IP 客户端是否可以连接到无法访问的 IP
- 服务器和客户端都在PC上运行.客户端可以使用PC的IP连接到服务器
- 如何从活动的 udp 连接获取远程 IP 地址和端口
- 使用静态IP地址时,ESP32 httpclient连接拒绝了
- 如何获取其他人可以使用的IP来连接到我的c 中的套接字构建
- 如何在我当前连接的网络中获取本地 IP 地址?
- 获取传入连接的源 IP 地址
- 唯一标识UDP连接-来自同一IP的多个连接
- c++winsock客户端无法使用主机IP的文本框进行连接
- 套接字连接到不存在的ip地址上的端口
- 为什么我无法在 C++ 中键入要连接的 IP
- c++结构声明和保存IP +连接的用法
- 创建一个控制台应用程序,打开TCP/IP连接并用C++、C#或Java打印输入的字符串
- 为什么我无法通过实际的公共 IP 连接到服务器?
- 特定接口上的TCP/IP连接