QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 808|回复: 2

使用sniffer分析的数据报如何接受下来?

[复制链接]
发表于 2005-5-30 09:04:18 | 显示全部楼层 |阅读模式
我用自定义TCP报头,发送出去一个SYN报文,使用sniffer可以接受到一个RST报文,可使用recvfrom()就是不能接受,请问还有什么方法接受?

下面是部分源码:(对IP和TCP头都已经负值)
[code:1]
int main(int argc, char *argv[])
{
        char recv_buff[MAX_BUFF_LEN];

        int        SZE = sizeof(DestAddr);//目标地址长度

        struct sockaddr_in from;
        int fromlen=sizeof(from);

        ULONG t=0,t1=0,t2=0;


        //参数少于2个,输出帮助信息,退出
        if (argc < 2)
        {
                Usage();
                return 0;
        }
        if(!GetIpAndPortByLine(argv[1]))
                return 0;
        //初始化连接
        if(!SetInitializeSock())
                return 0;
        //填充数据和计算检验和
        Send_Data_Size=10;
        memset(Send_Dest_Data,'a',Send_Data_Size);
        if(!AccCheckSum())
                return 0;

        //DestAddr初始化
        memset(&DestAddr, 0, sizeof(DestAddr));
        DestAddr.sin_family = AF_INET; //internet网络
        DestAddr.sin_port = htons(PORTT); //目的端口
        DestAddr.sin_addr.s_addr = htonl(IPTL); //目的IP
       
        memset(recv_buff,0,MAX_BUFF_LEN);

        ser.sin_family=AF_INET;
        ser.sin_addr.s_addr=ip_header.sourceIP;//源IP
        ser.sin_port=htons(SPORT);//源端口

        ErrorCode = bind(SockRaw,(struct sockaddr*)&ser,sizeof(ser));
        if (ErrorCode == SOCKET_ERROR)
        {
                fprintf(stderr, "bind() 函数失败,错误代码: %d\n", WSAGetLastError());
                return 0;
        }


/*        from.sin_family=AF_INET;
        from.sin_addr.s_addr=htonl(IPTL);
        from.sin_port=htons(PORTT);
        fromlen=sizeof(from);
*/
/*第一次发送*/
        ErrorCode=sendto(SockRaw,Send_Buff,HL,0,(SOCKADDR*)&DestAddr,SZE);
        t1=GetTickCount();
        if (ErrorCode==SOCKET_ERROR)
        {
                fprintf(stderr, "\n数据发送错误,错误代码:%d\n" ,GetLastError());
                return 0;
        }
        fprintf(stderr,"\n第一次发送%d的数据\n",ErrorCode);//打印发送字节总数
          ErrorCode=recvfrom(SockRaw,recv_buff,MAX_BUFF_LEN,MSG_PEEK,(struct sockaddr*)&from,&fromlen);
        t2=GetTickCount();
        if (ErrorCode==SOCKET_ERROR)
        {
        fprintf(stderr,"\n数据接受错误,错误代码:%d\n" ,GetLastError());
        return 0;
        }
        fprintf(stderr,"\n第一次接受%d的数据\n",ErrorCode);//打印发送字节总数   

        fprintf(stderr,"\nt2-t1=%d\n",t2-t1);
           closesocket(SockRaw);
           WSACleanup();
           return 1;       
}

[/code:1]
发表于 2005-6-1 17:59:02 | 显示全部楼层
好像没错啊
回复

使用道具 举报

发表于 2005-6-1 18:00:14 | 显示全部楼层
用read write先试下再看看
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-5 21:47 , Processed in 0.039647 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表