Ik ben met een soort filter applicatie bezig. Dit filter komt voor een andere applicatie te staan. Het is de bedoeling om al het verkeer door die applicatie door het filter te gooien. Voor de client of de applicatie mag het echter niet merkbaar zijn dat er een filter tussen zit.
Een schematische weergave:
client connect naar poort x -> server herschrijft het request naar poort x +1 via iptables, hierop draait het filter -> het filter doet zn werkt en als het packetje door mag faked hij een IP packet alsof het van de client komt en stuurt het naar poort x -> de normale applicatie op poort x antwoord terug naar de client.
Dit werkt goed en heb ik gecontroleerd met packet sniffers etc. Het antwoord komt netjes terug bij de client, echter de NAT voor de client snapt het niet want het id seq nr is veranderd. Het orginele seq nr kan ik niet zo achterhalen in het filter. Ik gebruik gewoon 0 in het gespoofde packet. Om de NAT echter te laten werken MOET ik dat seq nr achterhalen.
1 van de oplossingen is een packet sniffer in het filter implementeren..... Ik hoop echter dat dat niet hoeft en dat er een mogelijkheid is om het orginele IP packet terug te halen....
Helaas kan ik hier niks over vinden in de man pagina's etc...
Een schematische weergave:
client connect naar poort x -> server herschrijft het request naar poort x +1 via iptables, hierop draait het filter -> het filter doet zn werkt en als het packetje door mag faked hij een IP packet alsof het van de client komt en stuurt het naar poort x -> de normale applicatie op poort x antwoord terug naar de client.
Dit werkt goed en heb ik gecontroleerd met packet sniffers etc. Het antwoord komt netjes terug bij de client, echter de NAT voor de client snapt het niet want het id seq nr is veranderd. Het orginele seq nr kan ik niet zo achterhalen in het filter. Ik gebruik gewoon 0 in het gespoofde packet. Om de NAT echter te laten werken MOET ik dat seq nr achterhalen.
1 van de oplossingen is een packet sniffer in het filter implementeren..... Ik hoop echter dat dat niet hoeft en dat er een mogelijkheid is om het orginele IP packet terug te halen....
C:
1
2
3
4
5
6
7
8
9
10
11
| int recievePacket(struct sockaddr_in * cliaddr, char * msg) { int n; socklen_t len; len = sizeof(*cliaddr); n = recvfrom(sockfd,msg,1024,0,(struct sockaddr *)&(*cliaddr),&len); msg[n] = 0; return n; } |
Helaas kan ik hier niks over vinden in de man pagina's etc...