首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

破解电信、网通、铁通接入商限制共享下网三——修改TTL驱动程序

2012-08-02 
破解电信、网通、铁通接入商限制共享上网三——修改TTL驱动程序INT OnProcessMyPacket(PNDIS_PACKET Packet){i

破解电信、网通、铁通接入商限制共享上网三——修改TTL驱动程序
INT OnProcessMyPacket(PNDIS_PACKET Packet){int nRet = 0;UINT nPhysicalBufferCount = 0, nBufferCount = 0, nTotalPacketLength = 0;PNDIS_BUFFER pFirstBuffer = NULL;char * pBuf = NULL;UINT nLen = 0;struct ip_hdr * ipHdr = NULL;struct ethhdr * pEthHdr = NULL;struct ppp_hdr *pPppHdr = NULL;if(!Packet){return 0;}NdisQueryPacket(Packet, &nPhysicalBufferCount, &nBufferCount, &pFirstBuffer, &nTotalPacketLength);DbgPrint("PtReceivePacket:nPhysicalBufferCount:%d;nBufferCount:%d;nTotalPacketLength:%d\n",nPhysicalBufferCount, nBufferCount, nTotalPacketLength);//判断包头是否是正常长度if(nTotalPacketLength < PPPOE_HEAD_LENGTH){return 0;} // 结束 if(nTotalPacketLength < PPPOE_HEAD_LENGTH)//我机器缓存比较大,所有包都在一个BUFFER中,如果你的机器比较差,你需要遍历所有BUFFERNdisQueryBufferSafe(pFirstBuffer, &pBuf, &nLen, HighPagePriority);pEthHdr = (struct ethhdr * )pBuf;//是否是PPPOE荷载包if(pEthHdr->h_proto != htons(ETH_TYPE_PPPOE)){return nRet;} // 结束 if(pEthHdr->h_proto != htons(ETH_TYPE_PPPOE))pPppHdr = (struct ppp_hdr * )(pBuf + sizeof(struct ethhdr));//dump((char*)pBuf, nLen, "pppoe");//是否是IP协议包if(htons(PPPOE_TYPE_IP) != pPppHdr->protol){return nRet;} // 结束 if(htons(ETH_TYPE_IP) != pppId)DbgPrint("PtReceivePacket is ip over pppoe packet \n");ipHdr = (struct ip_hdr * )(pBuf + sizeof(struct ethhdr) + 8);ipHdr->ip_ttl = 30;//设置TTL//校验和ip_checksum(ipHdr);return nRet;}


 

 

校验和:

/*计算校验和*/UINT16 checksum(void *buf,int len){UINT32 sum = 0;UINT16 * cbuf;dump((char*)buf, len, NULL);DbgPrint("checksum:head len:%d\n", len);if(len < IP_HDR_LEN){DbgPrint("ip head len < %d\n", IP_HDR_LEN);return 0;} // 结束 if(len < IP_HDR_LEN)cbuf = (UINT16 * )buf;while(len>1){sum += *cbuf++;len -= 2;}if(len)sum += *(UINT8 * )cbuf;while(sum >> 16){sum = (sum & 0xffff) + (sum >> 16);} // 结束 while(sum >> 16)return ~sum;}void ip_checksum(struct ip_hdr * ipHdr){ipHdr->ip_sum = 0;DbgPrint("checksum:ip->ip_hl:%02X\n", ipHdr->ip_hl);ipHdr->ip_sum = checksum(ipHdr, ipHdr->ip_hl << 2);}


 

 

热点排行