Herskryf netwerk pakkies op die vlieg met behulp van libnetfilter_queue
-
28-09-2019 - |
Vra
Ek probeer om 'n userspace aansoek wat kan haak in netwerk stapel 'n OS skryf, snuif pakkies vlieg verby en wysig diegene wat sy belangstelling in.
Na baie Googlen, blyk dit vir my dat die eenvoudigste (nog redelik sterk) metode om dit te doen (op enige platform) is Linux se libnetfilter_queue
projek. Maar ek sukkel om enige redelike dokumentasie vir die projek, buite die beperkte amptelike dokumentasie. Die belangrikste eienskappe (soos deur die eerste skakel is)
- ontvangs tou pakkies van die kern nfnetlink_queue substelsel
- die uitreiking van verkragting en / of reinjecting verander pakkies om die kern nfnetlink_queue substelsel
Die klem is my eie. Hoe presies ek bedoel te werk gaan dit? Ek het probeer om die wysiging van die monster kode verskaf, maar miskien is ek misverstand iets. Die kode is wat in NFQNL_COPY_PACKET
af, so ek am ontvangs van die hele pakkie - maar my wysigings aan dit blyk te wees beperk tot my eie aansoek - as 'n mens sou verwag, gegewe die "kopieer" semantiek .
My gevoel is dat ek bedoel om gebruik van NF_QUEUE
een of ander manier te maak, maar ek het nie heeltemal grokked dit. Enige wenke?
(As daar 'n eenvoudiger meganisme om dit te doen, wat ook kruis-platform, wil ek graag om te hoor oor dit!)
Oplossing
Ek kan nie glo ek gemis hierdie voorheen. As terughoudend as ek op vrae oor SO plaas, het ek gedink ek sou nooit hierdie een uit te werk myself. :)
Ek het nie kyk na die funksie prototipe behoorlik. Dit blyk in die funksie "uitspraak" (hieronder uiteengesit),
int nfq_set_verdict(struct nfq_q_handle *qh,
u_int32_t id,
u_int32_t verdict,
u_int32_t data_len,
const unsigned char *buf
)
Die laaste twee parameters vir die data te wees teruggekeer om die netwerk stapel. Voor die hand liggend in nawete, maar ek het dit gemis heeltemal as die print_pkt
funksie nie die pakkie data as 'n parameter te neem, maar uittreksels dit uit die struct nfq_data
.
Die sleutel is om die pakkie NF_ACCEPT
en slaag die paslik gewysig pakkie terug na die kern.
Ander wenke
Net 'n wilde raaiskoot van grawe rondom die bron-kode: Probeer die verminkte loonvrag uitdruklik te voeg met behulp van nfnl_addattr_l(…, NFQA_PAYLOAD, …)