- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试将 sockaddr_storage 转换为 sockadd_in,这样我就可以打印出数据报包的源 IP 地址,我似乎无法获得正确的类型转换,
struct sockaddr_storage peer_addr;
getnameinfo((struct sockaddr *) &peer_add
peer_addrlen,
hostbuff, sizeof(hostbuff),
NULL, 0, NI_NAMEREQD);
inet_ntop(AF_INET, (((struct sockaddr_in *)peer_addr).sin_addr), ipbuff, INET_ADDRSTRLEN);
当我尝试将结构转换为 sockaddr_in 时,我得到“无法转换为指针”,或者当我删除取消引用时,我得到“请求转换为非缩放器类型”。
我尝试了很多组合,只是不明白我哪里出错了。
最佳答案
inet_ntop(peer_addr->ss_family, &(((struct sockaddr_in *)peer_addr)->sin_addr), ipbuff, INET_ADDRSTRLEN);
应该可以。但考虑改用 getnameinfo()
,这是更现代的界面:
char host[NI_MAXHOST];
getnameinfo((struct sockaddr *)peer_addr, peer_addr->ss_len, host, sizeof(host), NULL, 0, NI_NUMERICHOST);
适用于 IPv4 和 IPv6 地址。
根据问题中变化的类型更新:这是一个完整的例子应该在没有警告的情况下编译:
int socket = ...;
struct sockaddr_storage peer_addr;
socklen_t peer_addrlen;
char host[NI_MAXHOST];
ssize_t amount;
char buffer[1000];
amount = recvfrom(socket, buffer, sizeof(buffer), 0, (struct sockaddr *)&peer_addr, &peer_addrlen);
getnameinfo((struct sockaddr *)&peer_addr, peer_addrlen, host, sizeof(host), NULL, 0, NI_NUMERICHOST);
或者,使用 inet_ntop()
:
char ipbuff[INET_ADDRSTRLEN];
inet_ntop(peer_addr.ss_family, &(((struct sockaddr_in *)&peer_addr)->sin_addr), ipbuff, INET_ADDRSTRLEN);
关于将 sockaddr_storage 转换为 inet_ntop 的 sockaddr_in,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20130415/
我正在尝试从 inet_ntop 打印一个 ip 地址,但输出似乎很奇怪。 该程序似乎运行良好,我成功连接了套接字,但它打印了以下内容: H��H9�u�H�[]A\A]A^A_�ff.� 这是我的代
我有问题。我有代码需要将域名转换为IP。为此,我使用函数 getaddrinfo()。但似乎当我调用另一个函数(在 GETADDRINFO() 之后)时,我的程序崩溃了(getaddrinfo 返回错
我正在使用 C 构建 TCP 服务器:我包含了 inet_ntop() 函数所在的库 (WS2tcpip.h),但我的编译器返回以下错误: 'inet_ntop' was not declared i
#include #include #include "stdio.h" int main(int argc, wchar_t *argv[]) { //init Windows Sock
首先,我的代码示例: cout ai_addr)->sin_addr , ip4, INET_ADDRSTRLEN)) { return ERROR_PAR; } cout #include
请帮助我!我需要将域名(例如 google.com)翻译(或转换)为 IP 地址。为此,我在网上找到了代码,它工作得很好,但我不明白,为什么调用函数 inet_ntop() 两次。请帮我。这是代码:
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我曾经认为 inet_ntop 的第二个参数应该始终是 struct in_addr 或 struct in6_addr。但后来我查了一下 POSIX definition : const char
我试图了解如何通过套接字连接互联网。(但我卡住了。段错误的原因。)我不明白为什么这段代码会出现段错误:S 你能帮帮我吗。 int main() { int status; WSADAT
如何将函数 inet_ntop (const char *) 的返回值转换为 string? 代码: string ip = inet_ntop(b->ifa_addr->sa_family,temp
#include char buf[INET6_ADDRSTRLEN] = {}; int af = AF_INET; unsigned char addr[4] = {0x7f, 0x0, 0x0
在 Rust 中是否有现成的方法将 ip 地址(v4 和 v6)从二进制格式转换为文本格式(相当于 inet_ntop)? 例子: "3701A8C0" 转换为 "55.1.168.192", "20
我似乎从 inet_ntop 取回了错误的 IPv6 字符串,尤其是在它试图丢弃零序列以支持“::”的地址时。 这是代码; #include #include #include int main
您好,我创建了一个函数,该函数将接受的 sockFD 作为输入,并将表示形式的 ip 地址输出为字符串。该函数似乎工作正常,直到我开始使用 inet_ntop 的调用来打包字符串,该调用返回一个空指针
我正在创建一个 UDP 服务器客户端程序。客户端请求文件,服务器如果找到则将其发送给客户端。基于 Beej 的网络指南, inet_ntoa() returns the dots-and-number
我正在尝试根据此处给出的教程用 C++ 创建一个基本的网络服务器: https://vichargrave.github.io/articles/2013-02/tcp-ip-network-prog
我正在尝试将 sockaddr_storage 转换为 sockadd_in,这样我就可以打印出数据报包的源 IP 地址,我似乎无法获得正确的类型转换, struct sockaddr_storage
这是一个相当基本的问题,令我惊讶的是,我今天遇到了一个问题。 在我看来,inet_pton 和 inet_ntoa 正在反转它们给定的 IP 地址的字节: DWORD IP; inet_pton(AF
我正在 Linux 上开发一个应用程序。 Linux执行命令: ifconfig eth0 192.168.10.15 netmask 255.255.255.0 在使用 systemd 的引导过程中
我在 Windows XP 上收到错误“程序入口点 inet_ntop 无法位于动态链接库 WS2_32.dll 中”,经过一番谷歌搜索后,我发现 inet_ntop 在 XP 中不可用,所以我制作了
我是一名优秀的程序员,十分优秀!