用C语言socketRAW功能实现同一台主机两个网口间数据收发-创新互联
1,本例子使用一台PC,有两个网口,OS为CENTOS 6.8,然后使用两条网线分别都连接到同一个交换机上,当数据经过交换机时,交换机的数据灯会闪烁,否则就没有数据通过交换机。
创新互联服务项目包括市南网站建设、市南网站制作、市南网页制作以及市南网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,市南网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到市南省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!2,开始测试,刚开始理所当然的想到的是TCP Server/TCP Client模式,建立socket
int server_sockfd = socket(AF_INET,SOCK_STREAM, 0); struct sockaddr_in server_sockaddr; server_sockaddr.sin_family = AF_INET; server_sockaddr.sin_port = htons(MYPORT); server_sockaddr.sin_addr.s_addr = inet_addr(IP_PORT_0); if(bind(server_sockfd,(struct sockaddr *)&server_sockaddr,sizeof(server_sockaddr))==-1) { perror("bind"); exit(1); } if(listen(server_sockfd,QUEUE) == -1) { perror("listen"); exit(1); } char buffer[BUFFER_SIZE]; struct sockaddr_in client_addr; socklen_t length = sizeof(client_addr); int conn = accept(server_sockfd, (struct sockaddr*)&client_addr, &length); if(conn<0) { perror("connect"); exit(1); } while(1) { memset(buffer,0,sizeof(buffer)); int len = recv(conn, buffer, sizeof(buffer),0); send(conn, buffer, len, 0); } close(conn); close(server_sockfd); return 0; }
TCP Client端同样写相应代码,编译通过,先后执行server/client程序,显示都有数据收发成功,但交换机的数据灯没有任何显示,于是明白了,系统默认直接从本地发送接收数据,并没有从网卡端口实际发送出去,因为TCP是基于IP协议之上,而IP协议是肯定走本地内部路由,因此使用TCP,UDP等IP之上的协议肯定不会成功。
int init_sock (char index[IFNAMSIZ]) { int fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); struct sockaddr_ll sll; struct ifreq ifr; strncpy(ifr.ifr_name, index , IFNAMSIZ); ioctl(fd, SIOCGIFINDEX, &ifr); bzero(&sll, sizeof(sll)); sll.sll_ifindex = ifr.ifr_ifindex; ioctl(fd, SIOCGIFHWADDR, &ifr); memcpy(sll.sll_addr,ifr.ifr_hwaddr.sa_data,6); sll.sll_family = AF_PACKET; sll.sll_protocol = htons(ETH_P_ALL); bind(fd,(struct sockaddr *)&sll,sizeof(sll)); return fd; }
使用如上RAW Socket初始化后,再发送接收,一切OK!!!,能够接收到除了CRC之外的完整链路层帧,包括MAC地址,帧类型字段等,程序发送接收时,交换机的数据灯不停闪烁。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
名称栏目:用C语言socketRAW功能实现同一台主机两个网口间数据收发-创新互联
网站地址:http://ybzwz.com/article/ceehhh.html