c - IP作为数字没有通常的功能?

标签 c sockets ip

上下文

我想知道我们是否可以提取ip信息而不必使用gethostinfo或getnameinfo等...

我的代码的一部分

struct sockaddr in_addr;

socklen_t in_len;
int infd;
char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV];
in_len = sizeof in_addr;
infd = accept( fd , &in_addr , &in_len );

问题

我想以数字形式获取客户端/传入 IP,而不使用通常的格式(例如 3232238637 而不是 192.168.12.45)。这可能吗?

这些函数的来源正如人们所希望的那样晦涩难懂,所以我无法弄清楚。

我读到 in_addr (sockaddr) 可以有我需要的信息。没有什么特别的原因,只是发现这些功能和结构的“内部”。

谢谢!

最佳答案

对于 IPv4:

struct sockaddr_in in_addr;
socklen_t in_len = sizeof in_addr;

int infd = accept(fd, (struct sockaddr*) &in_addr, &in_len);

// in_addr.sin_addr.s_addr contains the client's IP address
// as a 4-byte integer, in network byte order...

对于 IPv6:

struct sockaddr_in6 in_addr;
socklen_t in_len = sizeof in_addr;

int infd = accept(fd, (struct sockaddr*) &in_addr, &in_len);

// in_addr.sin6_addr.s6_addr contains the client's IP address
// as a 16-byte array...

关于c - IP作为数字没有通常的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27464634/

相关文章:

c - 我的 execvp 使用有什么问题?

c - 使用不同文件中定义的回调给出 "Undefined reference"

raspberry-pi - GPS数据解析

c# - SSH.NET SocketException尝试以其访问权限禁止的方式访问套接字

mysql - MySQL 中 IP 数值的正则表达式?

c++ - 在 C++ 中使用 sscanf 从字符串中提取一个 int

c - 使用C打印服务器IP地址

python - python套接字编程: error trying to connect to server

javascript - 当 jQuery 无法获取 ip 地址时发出警报。

php - 获取IP地理定位