1) Przechwycenie pakietu, sprawdzenie czy jest to echo request.
2) Zamiana miejscami adresów docelowych i źródłowych.
3) Skopiowanie id i seq.
4) Obliczenie sum kontrolnych dla IP i ICMP.
4) Skopiowanie danych po nagłówku ICMP.
5) Złożenie w całość i odesłanie.
Tworzenie nagłówka ICMP:
Kod: Zaznacz cały
struct icmphdr *CreateIcmpHeader(struct icmphdr *icmphdr_input, int data)
{
struct icmphdr *icmp_header;
/* Parsowanie otrzymanego pakietu ICMP. Najpierw rozbieram stary
pakiet i wyluskuje z niego numer id oraz numer sekwencyjny a
pozniej laduje te wartosci do wysylanego pakietu ICMP Echo Reply*/
icmp_header = (struct icmphdr *)malloc(sizeof(struct icmphdr));
icmp_header->type = 0;
icmp_header->code = 0;
icmp_header->un.echo.id = icmphdr_input->un.echo.id;
icmp_header->un.echo.sequence = icmphdr_input->un.echo.sequence;
memset(icmp_header+4, 0, 4);
icmp_header->checksum = ComputeChecksum((unsigned char *)icmp_header, sizeof(struct icmphdr));
return (icmp_header);
}
Kod: Zaznacz cały
Reply from 192.168.0.xx: bytes=32 - MISCOMPARE at offset 0 - time<1ms TTL=84
[ Komentarz dodany przez: Zielony: 2007-09-16, 18:52 ]
Tag o rozwiązanym problemie wygląda tak: "[Rozw.]"!