免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2916 | 回复: 1
打印 上一主题 下一主题

[C] 求助RAW socket问题 [复制链接]

论坛徽章:
1
辰龙
日期:2014-01-22 21:48:03
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-01-21 12:10 |只看该作者 |倒序浏览
我想使用原始socket来尝试模拟tcp的三次握手,但是接受到的数据总是不对,代码如下,麻烦各位指教一下,我是新手,刚开始学习使用原始socket
谢谢:

#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <stdlib.h>
#include <string.h>
int main(int argc,char** argv)
{
//创建原始socket,基于tcp协议的
        int sockfd;
        sockfd=socket(AF_INET,SOCK_RAW,IPPROTO_TCP);
        struct sockaddr_in addr,clientaddr;
        addr.sin_family=AF_INET;
        addr.sin_port=htons(4000);
        addr.sin_addr.s_addr=inet_addr("127.0.0.1");
//构造tcp header syn位置1
        char buff[50];
        struct tcphdr *tcp;
        tcp=(struct tcphdr*)buff;
        tcp->source=htons(9000);
        tcp->dest=htons(4000);
        tcp->seq=htonl(100);
        tcp->ack_seq=0;
        tcp->doff=0;
        tcp->syn=1;

//发送数据,并接受返回       
        printf("%d\n",sendto(sockfd,buff,50,0,(struct sockaddr*)&addr,(socklen_t)sizeof(struct sockaddr_in)));
        memset(buff,'\0',50);
        int length=sizeof(struct sockaddr_in);
        recvfrom(sockfd,buff,50,0,(struct sockaddr*)&clientaddr,&length);
//打印返回得到的两个数据ack_seq以及source的port,(但是得到的是错误之)
        tcp=(struct tcphdr*)buff;
        printf("tcp ack_seq:%u\n",ntohl(tcp->ack_seq));
        printf("client port:%u\n",ntohs(tcp->source));

        sleep(100);
}

麻烦帮我看一下 多谢

论坛徽章:
1
双子座
日期:2014-01-24 10:23:13
2 [报告]
发表于 2014-01-22 08:44 |只看该作者
建议你写两个程序,一个服务器的一个客服端的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP