Home › Forums › Discussions › Support › HTTP Redirection › Reply To: HTTP Redirection
July 29, 2006 at 1:24 pm
#6107
I have recalculated TCP checksum also. When sending packet I change desination IP and when recieving I change source IP(as was described in some topic here). Redirection of telnet, ping works fine and http redirection is not(( here is code
void filter()
{
WaitForSingleObject ( hEvent, INFINITE );
ResetEvent(hEvent);
while (api->ReadPacket(request))
{
if (buffer->m_dwDeviceFlags == PACKET_FLAG_ON_SEND)
{
printf("Attemp to send...n");
parsePacketHeaders(buffer);
api->SendPacketToAdapter(request);
}
if (buffer->m_dwDeviceFlags == PACKET_FLAG_ON_RECEIVE)
{
printf("Recieved...n");
parsePacketHeaders(buffer);
api->SendPacketToMstcp(request);
}
}
}
PINTERMEDIATE_BUFFER parsePacketHeaders ( PINTERMEDIATE_BUFFER pBuffer )
{
ether_header_ptr pEthernet = (ether_header_ptr)&pBuffer->m_IBuffer;
if(ntohs(pEthernet->h_proto) == ETH_P_IP)
{
iphdr_ptr pIp = NULL;
tcphdr_ptr pTcp = NULL;
pIp = (iphdr_ptr)&pBuffer->m_IBuffer[sizeof(ether_header)];
UCHAR IpProto = pIp->ip_p;
if(IpProto == IPPROTO_TCP)
{
//pTcp = (tcphdr_ptr)(((PUCHAR)pIp) + sizeof(DWORD)*pIp->ip_hl);
}//tcp??
//redirection here
if ((pIp->ip_dst.S_un.S_un_b.s_b3 == 32) & (pIp->ip_dst.S_un.S_un_b.s_b4 == 14))
{
pIp->ip_dst.S_un.S_un_b.s_b4 = 9;
pIp->ip_dst.S_un.S_un_b.s_b3 = 32;
recalculateIPChecksum(pBuffer);
recalculateTCPChecksum(pBuffer);
}
if ((pIp->ip_src.S_un.S_un_b.s_b3 == 32) & (pIp->ip_src.S_un.S_un_b.s_b4 == 9))
{
pIp->ip_src.S_un.S_un_b.s_b4 = 14;
pIp->ip_src.S_un.S_un_b.s_b3 = 32;
recalculateIPChecksum(pBuffer);
recalculateTCPChecksum(pBuffer);
}
}
return pBuffer;
}
SerpentFly – ты русский? Если да – то пиши по-русски)) А то я думал тут все из-за бугра.
Еще ethreal ом посмотрел – модифицированные http пакеты не выходят(( просто Ip(ping) telnet – нормально.