如何获取对方的ip
时间: 2024-02-29 09:52:30 浏览: 25
要获取对方的 IP 地址,需要了解一下网络编程中的一些基础知识。在 TCP/IP 协议中,每个计算机都有一个唯一的 IP 地址,用于在网络中标识这台计算机。在通信过程中,可以通过连接双方的 IP 地址来进行数据传输。
如果你正在编写一个网络应用程序,需要获取对方的 IP 地址,可以通过网络套接字(socket)中的一些函数来实现。在 Windows 平台上,可以使用以下函数获取对方的 IP 地址:
1. `getpeername` 函数:获取连接到本地计算机的远程计算机的 IP 地址和端口号。
2. `gethostbyaddr` 函数:根据 IP 地址获取主机名。
具体实现可以参考以下示例代码:
```c++
#include <WinSock2.h>
#include <WS2tcpip.h>
#include <iostream>
#pragma comment(lib, "Ws2_32.lib")
int main() {
WSADATA wsa;
SOCKET s;
struct sockaddr_in server;
char* message, server_reply[2000];
int recv_size;
// 初始化 Winsock
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0) {
std::cout << "Failed. Error Code : " << WSAGetLastError() << std::endl;
return 1;
}
// 创建套接字
if ((s = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) {
std::cout << "Could not create socket : " << WSAGetLastError() << std::endl;
return 1;
}
// 服务器地址和端口号
server.sin_addr.s_addr = inet_addr("192.168.0.1"); // 对方的 IP 地址
server.sin_family = AF_INET;
server.sin_port = htons(80);
// 连接到远程服务器
if (connect(s, (struct sockaddr*)&server, sizeof(server)) < 0) {
std::cout << "connect error" << std::endl;
return 1;
}
// 获取对方的 IP 地址
struct sockaddr_in addr;
int len = sizeof(addr);
getpeername(s, (struct sockaddr*)&addr, &len);
char ip[INET_ADDRSTRLEN];
inet_ntop(AF_INET, &addr.sin_addr, ip, INET_ADDRSTRLEN);
std::cout << "Connected to " << ip << std::endl;
// 发送数据
message = "GET / HTTP/1.1\r\n\r\n";
if (send(s, message, strlen(message), 0) < 0) {
std::cout << "Send failed" << std::endl;
return 1;
}
// 接收服务器的响应
if ((recv_size = recv(s, server_reply, 2000, 0)) == SOCKET_ERROR) {
std::cout << "recv failed" << std::endl;
}
// 关闭套接字
closesocket(s);
WSACleanup();
return 0;
}
```
在上面的示例代码中,我们使用 `getpeername` 函数获取对方的 IP 地址,并将其转换为字符串格式输出。这样,就可以在网络应用程序中获取对方的 IP 地址了。