Linux防火墙数据包捕获模块
2006-07-04 12:38:22 来源:WEB开发网int socket(int domain, int type,int protocol);
3)recvfrom()函数定义
用recvfrom()函数来实现接收数据包,recvfrom()是具备“阻塞式I/O”特性的函数,能够在没有数据包到达的情况下暂时挂起等待,直至接收到数据包后,再激活转入下一步处理。recvfrom()函数的原型为:
int recvfrom(SOCKET s,char FAR *buf,int len,int flags,struct sockaddr FAR *from,int *fromlen);
本函数从已连接套接口上接收数据,并捕获数据发送源的地址。对于SOCK_STREAM类型的套接口,最多可以接收缓冲区大小个数据。如果套接口被设置为线内接收带外数据(选项为 SO_OOBINLINE),且有带外数据未读入,则返回带外数据。应用程序可通过调用ioctlsocket()的SOCATMARK命令来确定是否有带外数据待读入。对于SOCK_STREAM类型套接口,忽略from和fromlen参数。
4)一些“字节顺序”转换函数
因为网络和主机采用的存储字节时内存顺序安排方式的差异,就存在“字节顺序”的问题。在网络环境下存储时,高位字节存放在内存的起始位置,而低字节则存放在较高的位置。主机形式的存放顺序恰好相反,低位字节存放在内存的起始位置。这就需要以下相应的字节顺序转换函数:
inet_ntoa():将32位的网络二进制数值转换为可读十进制形式的带点分割符的IP地址。
inet_addr():将带有分割符的IP地址转换为32位的unsigned long的格式。
ntohs():将网络字节顺序转换为32位的主机字节顺序。
ntohl():将网络字节顺序转换成16位的主机字节顺序。
htonl():将32位u_long的值由主机字节顺序转换为网络字节顺序。
htons():将16位u_long的值由主机字节顺序转换为网络字节顺序。
更多精彩
赞助商链接