c - Lav et program der afbryder netværkstrafik i Windows

Indlæg af Hanne Mølgaard Plasc

Problem



Sort af hvad jeg spørger er 'hvordan man laver en software firewall til Windows', men noget ikke så komplekst. Jeg er overrasket over, at jeg kan finde så lidt, når jeg søger efter dette, kun lejlighedsvis omtale af kroge. Så det bliver meget værdsat, hvis nogen kunne pege på mig i den rigtige retning.


Jeg forventer at gøre dette med C (selvom der er et andet sprog, du tror, ​​ville fungere bedre, er jeg alle ører). Jeg vil gerne lave en applikation, der overvåger netværkstrafik, kan hente IP-adressen (kilde til indkommende, destination for udgående) og kan blokere netværksaktiviteten.


Dette virker som noget, der ville være meget nemmere at gøre i kernen, men jeg ønsker ikke at mucke rundt derinde, og jeg har heller ikke adgang til det i Windows. Jeg er ikke bekymret for effektivitet, heller ikke ser jeg på at lave en personlig firewall. Dette er kun til et eksperiment vedrørende IP-adresser.


Nogle pointers?


Bemærk: Det er vigtigt, at jeg også kan blokere netværkets bestemte netværksaktivitet og ikke bare overvåge det

Bedste reference


DIY-vejen ville gå i kernel-tilstand ved hjælp af filterkrogdrivere (til Windows 2000-XP) eller WFP Callout-drivere. [4] [5]


Hvis du vil lade andre gøre det beskidte arbejde i kernel-tilstand, driver WinPcap-driveren/biblioteket masser af netværksfunktioner på lavt niveau, herunder dem du har brug for, som du kan bruge fra brugerfunktionen (bemærk at du bruger WinPcap, du kan 't drop pakker). [6]

Andre referencer 1


Det lyder som det, du leder efter, er en Winsock Service Provider Interface (SPI) Layered Service Provider (LSP). Fra hvad du har sagt, hvis du beskæftiger dig med Vista eller nyere, vil du sandsynligvis implementere en forekomst af klassen LSP\_INSPECTOR. For ældre versioner af Windows bruger den pågældende klasse ikke præcis, men den samme generelle ide gør det. På Vista/7 indstiller du kategorien (klasse) til din ansøgning med WSCSetApplicationCategory. For at installere din udbyder udfylder du en WSAPROTOCOL\_INFO struktur og registrerer den ved at ringe til WSCInstallProvider. [7] [8] [9] [10] [11]

Andre referencer 2


Du vil se på libpcap og tcpdump. [12]

Andre referencer 3


Jeg tror, ​​hvad du leder efter, er en pakkesniffer, den vil aflytte næsten alle kommunikationer via et netværk. Hvis du vil bruge et bibliotek, skal du tjekke WinPCap, som var beregnet til netop dette formål. [13]


Også, hvis du tror, ​​at du bare vil have noget forudskrevet og bare vil ændre det, så tjek Wireshark. Selvom læsekode er ofte vanskeligere end at skrive det. [14]

Andre referencer 4


prøv winpcap. Som 'tcpdump med en GUI' kan du prøve wireshark. [15] [16]