首页
社区
课程
招聘
[求助]一个NDIS 的TCP/IP欺骗问题
发表于: 2012-11-14 23:10 10124

[求助]一个NDIS 的TCP/IP欺骗问题

2012-11-14 23:10
10124
首先我介绍一下我个人的想法:
  打个比方,当我打开一个网页,拦截到HTTP请求,那么我在NDIS层创建一样HTTP回应包直接回给上层,删除原来的HTTP请求包。

  但是问题出来了,包创建好了,返回到上层,用抓包工作也能抓到我创建的包,可是IE却没有显示我想要的网页,可能是TCP认为我这个包不合法给丢掉了

主要代码如下:

//构造Ethernet协议头
        pDstMac = (PEthernet)httpBuf;
        NdisMoveMemory(&pDstMac->DstMAC,&pSrcMac->SrcMAC,sizeof(MAC));
        NdisMoveMemory(&pDstMac->SrcMAC,&pSrcMac->DstMAC,sizeof(MAC));
        pDstMac->TreatyType = pSrcMac->TreatyType;

        pDstIPHeader = (PIP_HEADER)(httpBuf + IP_OFFSET);

        //构造IP头
        NdisMoveMemory(pDstIPHeader,pSrcIPHeader,sizeof(IP_HEADER));
        NdisMoveMemory(&pDstIPHeader->iaDst,&pSrcIPHeader->iaSrc,sizeof(IN_ADDR));
        NdisMoveMemory(&pDstIPHeader->iaSrc,&pSrcIPHeader->iaDst,sizeof(IN_ADDR));
        pDstIPHeader->Checksum = 0;

        //构造TCP头
        pDstTcpHeader = (PTCP_HEADER)(pDstIPHeader+1);

        pDstTcpHeader->DesPort = PSrcTcpHeader->Souport;
        pDstTcpHeader->Souport = PSrcTcpHeader->DesPort;
        pDstTcpHeader->Flags = PSrcTcpHeader->Flags;
        pDstTcpHeader->WindowSize = PSrcTcpHeader->WindowSize;
       
        pDstTcpHeader->urgent_pointer = PSrcTcpHeader->urgent_pointer;
        pDstTcpHeader->HeaderLength = PSrcTcpHeader->HeaderLength;

        pDstTcpHeader->checksum = 0;
        pDstTcpHeader->sequence_number = PSrcTcpHeader->Ack;
        pDstTcpHeader->Ack = PSrcTcpHeader->sequence_number;
       

        //目前就自己写一个
        sprintf(httpText,
                "<html>\r\n"
                "<你发了吗,我发了\r\niframe src=\"http://%s\" frameborder=no height=\"100%\" width=\"100%\"></iframe>\r\n"
                "</html>",
                pHttpGetHead->m_Host);

        HttpTextSize = strlen(httpText);

        //构造HTTP回应头和正文
                sprintf((UCHAR*)(pDstTcpHeader + 1),
                        "HTTP/1.1 200 OK\r\n"
                        "Content-Type: text/html\r\n"
                        "Connection: close\r\n"
                        "Content-Lenght: %d"
                        "\r\n\r\n"
                        "%s\r\n\r\n",
                        HttpTextSize,
                        httpText
                        );

        uHttpSize = strlen((UCHAR*)(pDstTcpHeader + 1)) ;
        if (uHttpSize<=0)
        {
                Dbg_Printf(DB_Error,("HTTP协议大小错误!\r\n"));
                return NDIS_STATUS_RESOURCES;
        }

        //计算IP头长度
//         tcpLen = sizeof(IP_HEADER) + sizeof(TCP_HEADER) + uHttpSize;
//          pDstIPHeader->TotLen = tcpLen;

        pDstTcpHeader->HeaderLength = 0x50;

        //计算校验和
        pDstIPHeader->Checksum = checksum((USHORT* )pDstIPHeader,tcpLen);

        //计算校验和
        NdisZeroMemory(&tcpPsdSend,64);
        tcpPsd.TCP_AddrSource = pDstIPHeader->iaDst.s_addr;
        tcpPsd.TCP_AddrTarget = pDstIPHeader->iaSrc.s_addr;
        tcpPsd.TCP_MBZ = 0;
        tcpPsd.TCP_Protocol=IPPROTO_TCP;
        tcpPsd.TCP_Length = 0x50;

        NdisMoveMemory(tcpPsdSend,&tcpPsd,sizeof(STcpHeaderPSD));
        NdisMoveMemory(tcpPsdSend + sizeof(STcpHeaderPSD),pDstTcpHeader,sizeof(TCP_HEADER));
        pDstTcpHeader->checksum = checksum((USHORT*)tcpPsdSend,sizeof(STcpHeaderPSD) + sizeof(TCP_HEADER));

这个是构造整个IP包的过程,请大牛们指点,急在线等

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 429
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
自己顶一下,问题还没解决,可不能沉了
2012-11-15 01:34
0
雪    币: 190
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
帮楼主顶顶
2012-11-15 02:31
0
雪    币: 429
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
没人回答呀,再顶一下
2012-11-15 10:12
0
雪    币: 429
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
pDstTcpHeader->Ack 序号后面倒底是加收到包数据的大小,还是要发送数据的大小呢?试了两个好象都不对
2012-11-15 11:55
0
雪    币: 429
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
问题已解决,不过又有一个新问题,在当IE收到我的网页的时候,一直在那里正在连接服务器,怎么断开这个连接呢?
2012-11-15 18:11
0
雪    币: 148
活跃值: (59)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
断开连接是四次握手
http://www.cnpaf.net/Class/download/200903/23350.html
2012-12-12 11:27
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
求楼主赐教构造数据包的具体代码~~
2013-7-9 10:31
0
游客
登录 | 注册 方可回帖
返回
//