UNIX网络编程:UDP回射服务器程序(初级版本)及漏洞分析
发布时间:2016-09-09 12:21:04 所属栏目: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);
}
} (编辑:应用网_镇江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
