UNIX网络编程:UDP回射服务器程序(初级版本)及漏洞分析
发布时间:2016-09-09 21:17:14 所属栏目:Unix 来源:站长网
导读:该函数提供的是一个迭代服务器,而不是像TCP服务器那样可以提供一个并发服务器。其中没有对fork的调用,因此单个服务器进程就得处理所有客户。一般来说,大多数
我们的解决办法是修改recvfrom调用以返回数据报发送者的IP地址和端口号,保留来自数据报所发往服务器的应答,而忽略任何其他数据报。 void dg_cli(FILE *fp, int sockfd, const SA *pservaddr, socklen_t servlen) { int n; char sendline[MAXLINE], recvline[MAXLINE + 1]; socklen_t len; struct sockaddr_in *preply_addr; preply_addr = malloc(servlen); while (fgets(sendline, MAXLINE, fp) != NULL) { sendto(sockfd, sendline, strlen(sendline), 0, pservaddr, servlen); len = servlen; n = recvfrom(sockfd, recvline, MAXLINE, 0, (SA*)preply_addr, &len); if (len != servlen || memcmp(pservaddr, (SA*)preply_addr, len) != 0) { printf("reply from %s (ignored)n",inet_ntoa(preply_addr->sin_addr)); continue; } recvline[n] = 0; /* null terminate */ fputs(recvline, stdout); } } (编辑:应用网_丽江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |