Vraag & Antwoord

Programmeren

[Sockets] ICMP als data carrier

Hallo mensen, Ik weet niet zeker of dit de juiste categorie is om dit te posten, maar het leek mij de beste. Ik ben aan het experimenteren met ICMP in C op Windows (Winsock), het is weinig moeilijk om een ping applicatie in elkaar te draaien en dat lukt dan ook wel. Wat ik echter eigenlijk zou willen is de payload van de ICMP Echo packet gebruiken om data over te sturen naar de ontvanger. Dit is kennelijk problematisch. Aan de kant van de ontvanger heb ik een progje draaien dat een raw ICMP socket bind op een "port", het nummer van deze "port" moet overeen komen met het ID van het binnenkomende ICMP packet heb ik gelezen - dat komt ook keurig overeen. In principe zou deze bound raw ICMP socket dus door middel van select() en recv() calls de data moeten kunnen ontvangen die de "client" stuurt. Dit gaat echter niet. Ik heb in mijn registry al DisableRawSecurity op 1 gezet en nog gaat het niet. Als ik met Ethereal alle ICMP packets oppak dan zie ik wel degelijk de ICMP Echo voorbij komen en de ontvanger stuurt een ECHO REPLY terug (dat doet het OS uit zichzelf denk ik zomaar). Op mijn applicatie komt echter geen packet binnen en ik krijg geen data. Nu vraag ik me af of het uberhaupt mogelijk is om dit te doen. Of misschien moet ik een ICMP Packet soort gebruiken die niet predefined is, omdat Echo misschien al op OS niveau wordt onderschept? Ik heb ergens een *nix-based tunnel app gezien die TCP traffic over ICMP tunneled, dus het lijkt me dat een dergelijke constructie op Windows ook mogelijk moet zijn. De sources die ik tot nu toe heb geproduceerd zijn hier te downloaden; http://dump.lycantrope.com/icmp Om te compileren wel wsock32.lib in de lijst met libraries zetten. Hopelijk kan iemand me op weg helpen. - Fahr

0 antwoorden

    Beantwoord deze vraag

    Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

    Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.