socket通断检查
netinet/if_ether.h ether_arp的数据结构
netinet/ether.h 以太祯的网络字节和ascii字节的转换,包括ether_ntoa(),ether_aton这样的函数定义
netinet/ip.h 这个头文件和linux/ip.h似乎很相似,也有iphdr的数据结构,同时还包括了timestamp结构,我的理解是,linux文件夹下的 ip.h是linux黑客编写的ip头文件,而这个则是gnu一开始就定义的头文件,同时还包括了bsd中的ipheader结构定义。同理的还有该目录 下的tcp.h等文件
linux/ip.h iphdr的数据结构,以及一些ip层的数据定义,同理的还有tcp.h,udp.h等等
linux/if.h 主要的socket头文件,似乎修改自unix的if.h,定义了网卡的接口信息的宏,例如IFF_UP.另外有数个重要的interface的数据结构定义,包括ifreq,ifconf,ifmap
linux/if_packet.h 原始数据包的数据结构定义,包括sockaddr_pkt,sockaddr_ll,想接收原始数据包的不能错过这个文件。同理的还有if_ppp.h,if_tun.h等等
netinet/in.h 这个文件作的事情就多了。端口宏定义,著名ip(比如loopback),结构sockaddr_in,网络字节转换(ntoh,hton。。。。)。。。反正太多了,没事的话就把这个文件加到头文件包含里吧
netdb.h 文件如其名,包括结构hostent(主机环境),获得主机的信息的几个函数(gethostbyname)。似乎这个就是定义主机的各项环境,例如hostname等等
net/bpf.h berkeley的数据包过滤头文件,想用bpf进行包过滤的要重视一下这个文件
net/ethernet.h 包括几个以太网的数据结构,ether_addr(mac帧结构),ether_header(以太帧的头部)
-------------------------------
------------------------------
linux下socket编写常用头文件
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
- 测试socke 通断
//#define NET_PORT 53
//#define NET_IP "8.8.8.8" //谷歌DNS
#include
#include //connect,send,recv,setsockopt等
#include
#include // sockaddr_in, "man 7 ip" ,htons
#include //poll,pollfd
#include //inet_addr,inet_aton
#include //read,write
#include //gethostbyname
#include //perror
#include
#include //errno
#include // memset#define NET_PORT 80
#define NET_IP "www.baidu.com" //百度80端口//获取联网状态
int check_net_status(void)
{int fd;int in_len = 0;struct sockaddr_in servaddr;struct hostent *host;unsigned int inaddr = 0l;struct in_addr *ipaddr;in_len = sizeof(struct sockaddr_in);fd = socket(AF_INET, SOCK_STREAM, 0);if (fd < 0){perror("socket");return -1;}/*设置默认服务器的信息*/servaddr.sin_family = AF_INET;servaddr.sin_port = htons(NET_PORT);// servaddr.sin_addr.s_addr = inet_addr(NET_IP);memset(servaddr.sin_zero, 0, sizeof(servaddr.sin_zero));/*判断是主机名还是ip地址*/if (inaddr = inet_addr(NET_IP) == INADDR_NONE){if ((host = gethostbyname(NET_IP)) == NULL) /*是主机名*/{perror("gethostbyname error");return (-1);}#ifdef DEBUGprintf("0IP Address : %s\n", inet_ntoa(*((struct in_addr *)host->h_addr)));printf("1IP Address : %s\n", inet_ntoa(*((struct in_addr *)host->h_addr_list[1])));printf("h_name : %s\n", host->h_name);printf("h_aliases : %s\n", host->h_aliases);printf("h_addrtype,h_length : %d,%d,AF_INET=%d\n", host->h_addrtype, host->h_length, AF_INET);
#endif//方法1:ipaddr = (struct in_addr *)host->h_addr;servaddr.sin_addr.s_addr = (ipaddr->s_addr);//方法2:这个算是多此一举了!多了一句无用功// inaddr = inet_addr(inet_ntoa(*ipaddr));// servaddr.sin_addr.s_addr = inaddr;}else /*是ip地址*/{servaddr.sin_addr.s_addr = inaddr;}/*connect 函数*/if (connect(fd, (struct sockaddr *)&servaddr, in_len) < 0){printf("connect failed t!\n ");close(fd);return 0; //没有联网成功}else{printf("=====connect ok!=====\n");close(fd);return 1;}
}
int main(char argc, char *argv[])
{check_net_status();
}
参考链接
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
