【发布时间】:2015-09-11 11:04:29
【问题描述】:
我有一小段代码将一个 32 位无符号整数(即:uint32_t)转换为一组四个 8 位字段,将其视为 IP 地址,然后向客户端报告位于预定的 IP 地址范围内。
我有 already found 一些 different examples 的 C 代码,它们向我展示了如何从包含它的 struct sockaddr_in 以及 with a C# answer 获取客户端的 IP 地址。但是,我想进一步分解地址,将其保留在纯 C 中,并想知道一些快速的事情:
- 系统之间的内部表示是否一致,或者我是否需要对
s_addr字段进行字节顺序检查/更正? - 是否有类似于
CLASS_C_NETMASK、CLASS_B_NETMASK等的标准宏,它们比使用手动生成的掩码更合适(即:0xFF000000、0x00FF0000等)。 - 套接字库中是否有任何现有函数可以检查 IP 地址是否在 IP 地址范围内或与子网掩码匹配?
谢谢。
【问题讨论】:
-
s_addr始终采用“网络字节序”,即大端序。 -
Beej's Guide to Network Programming 不会出错。将其添加到您的参考/示例列表中以进行检查。 (他的其他导游也不错)
标签: c sockets ip-address subnet netmask