[Delphi + Indy 9] IdIcmpClient (ping) send buffer size

Pagina: 1
Acties:
  • 212 views sinds 30-01-2008
  • Reageer

  • KBDE
  • Registratie: Januari 2001
  • Laatst online: 12-02 22:37
Ben al een tijd lang aan het kijken voor een probleem dat relatief simpel op te lossen moet zijn.
Ik gebruik delphi 2003 het indy9 component: IdIcmpClient

Ik ping met behulp van dit component om te kijken of een bepaalde host bereikbaar is.
Daar ik dit echter over een GPRS verbinding doe wil ik de send buffer size zo klein als mogelijk houden.
Standaard staat deze echter op een erg grote 72 Bytes.
Liefst zet ik deze op 0 of 1 bytes. al na gelang wat ondersteunt wordt.

Maar hoe doe ik dit? Heb al veel geprobeerd, maar het lijkt wel of een simpele optie zoals deze niet ondersteunt wordt?!

Tips zijn welkom.

  • eek
  • Registratie: Februari 2001
  • Laatst online: 06-04-2020

eek

@MagickNET

Volgens mij kan dat niet. De minimum packetsize voor een ethernet frame is 64 bytes volgens mij. En de rest zal wel nodig zijn voor icmp.

Skill is when luck becomes a habit.


  • KBDE
  • Registratie: Januari 2001
  • Laatst online: 12-02 22:37
eek schreef op vrijdag 05 mei 2006 @ 14:06:
Volgens mij kan dat niet. De minimum packetsize voor een ethernet frame is 64 bytes volgens mij. En de rest zal wel nodig zijn voor icmp.
Hmmm, heb nu niet via een packet analyser gekeken, maar via de microsoft ping kun je zelfs met 1 byte pingen. Is dus de vraag of hij niet toch 'stiekem' een grotere packet size heeft.

Anyway, tips zijn en blijven welkom :)

[ Voor 7% gewijzigd door KBDE op 05-05-2006 15:12 ]


Verwijderd

Als je in de source van Indy 9 duikt, zie je dat:
- PrepareEchoRequest al 52 bytes reserveert (DEF_PACKET_SIZE + SizeOf(TIdIcmpHdr)) en
- SendEchoRequest hier nog 16 bytes aan toevoegt (SizeOf(TSockAddrIn)).
Een minimum van 68 bytes dus.

De overige 4 bytes zullen wel toegevoegd worden door LPFN_SENDTO in WS2_32.DLL, denk ik.

Sommige andere ping implementaties komen tot een minimum packet size van 56, waarschijnlijk door een DEF_PACKET_SIZE van 16 i.p.v. 32 bytes te gebruiken? Geen idee waarom die by Indy 32 is, maar misschien i.v.m. IPv6 compatibiliteit?

Anyway, een ping van 1 byte is simpelweg onmogelijk. :)

  • Wim-Bart
  • Registratie: Mei 2004
  • Laatst online: 10-01-2021

Wim-Bart

Zie signature voor een baan.

Ping van 0 bytes is in principe mogelijk, maar we hebben te maken met de interpretatie van PING. Ieder IP frame, dus ook een ICMP PING frame heeft een bepaalde minimale lengte. Daarbij komt nog de payload. Deze laatste kan je bepalen van 1 t/m 4294967295 bytes. De IP stack hakt te lange frames uit elkaar en stopt ze aan het einde van de lijn weer bij elkaar. Wanneer je het DF bit gebruikt dan wordt de maximale framesize bepaald door de maximale MTU size tussen verzender en ontvanger.

Beheerders, Consultants, Servicedesk medewerkers. We zoeken het allemaal. Stuur mij een PM voor meer info of kijk hier De mooiste ICT'er van Nederland.