Home › Forums › Discussions › Support › Modify packet [DELPHI] › Reply To: Modify packet [DELPHI]
June 29, 2004 at 6:45 am
#5580
I not absolutely understand a question, therefore I shall answer how I have understood it.
...
var
ReadRequest: ETH_REQUEST;
Buffer: INTERMEDIATE_BUFFER;
pEthernetHeader: PETHERNET_HDR;
pIpHeader: PIP_HDR;
pTCPHeader: PTCP_HDR;
pData: Pbyte;
DataSize: Integer;
...
const
HSIZE = sizeof(ETHERNET_HDR) + sizeof(IP_HDR)+ sizeof(ICMP_HDR);
...
ReadRequest.EthPacket.Buffer := @Buffer;
ReadRequest.hAdapterHandle := hAdapter;
...
if ReadPacket (hFilt, @ReadRequest) <> 0 then
begin
...
pEthernetHeader := @ReadRequest.EthPacket.Buffer.m_IBuffer;
pIPHeader := Pointer(integer(pEthernetHeader)+sizeof(ETHERNET_HDR));
pTCPHeader := Pointer(integer(pIPHeader)+sizeof(IP_HDR));
DataSize := ReadRequest.EthPacket.Buffer.m_Length - HSIZE;
PData := Pointer(integer(pEthernetHeader)+HSIZE);
// or so
//PData := Pointer(integer(pTCPHeader)+sizeof(TCP_HDR));
...
// Change Port Destination to 4032
pTCPHeader.Destination := htons(4032);
// Tne IPHeader checksum it is not recalculated therefore as the size of a package has not changed
pTCPHeader.CheckSum := 00;
pTCPHeader.Checksum := htons(Checksum(Pword(pTCPHeader), (sizeof(TCP_HDR) + DataSize) div 2));
//If the size of a packet has changed, it is necessary to align a packet to word and recalc IP Header and accordingly TCP Header
...
SendPacketToAdapter(hFilt, @ReadRequest);
end;
...
In a code there can be mistakes, for what beforehand apologize.