Muszę wprowadzić niewielką modyfikację ruchu przychodzącego ze znanego hosta TCP: port, zanim proces obsługujący połączenie pobierze strumień.
Na przykład niech 192.168.1.88 będzie hostem zdalnym, na którym działa serwer WWW.
Potrzebuję tego, gdy proces na moim hoście lokalnym odbiera dane z 192.168.1.88:80 (np. Przeglądarki), najpierw zmienia się dane, zastępując text-A
je text-B
następującymi:
- 127.0.0.1: ... łączy się z 192.168.1.88:80
127.0.0.1: ... wysyła na 192.168.1.88:80:
GET /
192.168.1.88:80 wysyła do 127.0.0.1: ...:
HTTP/1.0 200 OK Content-Type: text/plain Some text-A, some other text
Te dane są w pewien sposób przechwycone przez system i przekazane do programu, którego wynikiem jest:
HTTP/1.0 200 OK Content-Type: text/plain Some text-B, some other text
system przekazuje tak zmienione dane do obsługi procesu 127.0.0.1: ... tak, jakby pochodziły z 192.168.1.88:80.
Zakładając, że mam sposób dokonywania tych zmian na podstawie strumienia ( sed
na przykład), jaki jest najłatwiejszy sposób na wstępne przetworzenie przychodzącego strumienia tcp?
Myślę, że wymagałoby to zaangażowania iptables
, ale nie jestem w tym zbyt dobry.
Pamiętaj, że aplikacja powinna działać z oryginalnym hostem, więc skonfigurowanie serwera proxy nie jest rozwiązaniem.
źródło
Odpowiedzi:
Używaj proxy i netables.
Następnie uruchomić:
NetSED to małe i poręczne narzędzie przeznaczone do zmiany w czasie rzeczywistym zawartości pakietów przesyłanych przez sieć. Jest to naprawdę przydatne do zmiany pakietów sieciowych, fałszowania lub manipulacji. NetSED obsługuje:
audytowanie czarnej skrzynki - za każdym razem, gdy dwie lub więcej zastrzeżonych skrzynek komunikuje się za pomocą jakiegoś nieudokumentowanego protokołu. Wymuszając zmiany w trwających transmisjach, będziesz mógł sprawdzić, czy badana aplikacja może być uznana za bezpieczną.
eksperymenty z generowaniem fuzzów, testy integralności - za każdym razem, gdy przeprowadzasz testy stabilności aplikacji, aby zobaczyć, jak dba ona o integralność danych;
inne typowe przypadki użycia: oszukańcze transfery, filtrowanie treści, konwersja protokołów - wszystko, co najlepiej odpowiada twojemu zadaniu.
źródło
netsed
, że pasuje prawie idealnie do moich celów. Jedyne, czego nie rozumiem, to jak skonfigurować „lokalny przezroczysty serwer proxy” (patrz pytanie). Być może powinienem skonfigurować inny (wirtualny) interfejs sieciowy, aby to uzyskać. Nawiasem mówiąc, na razie jest to najbardziej satysfakcjonująca odpowiedź.OUTPUT
, niePREROUTING
. Również-D
opcja miała być-A
dla mnie. także dla-j
opcji musiałem użyćDNAT --to-destination (ip)
lubREDIRECT --to-port
. Wreszcie, NIE mogłem naprawić błędu segmentacji netsed. patrz także: ubuntuforums.org/showthread.php?t=2337389Możesz to zrobić dokładnie, używając iptables do przezroczystego połączenia proxy przez proxy Squid , a następnie każąc Squidowi ponownie napisać zawartość HTTP .
źródło
iptables
+ użycie libnetfilter_qu to kolejna opcja, która zrobi to, co chcesz:„... [reinject] zmodyfikowane pakiety do podsystemu jądra nfnetlink_queue.”
Zapewni to największą elastyczność, ponieważ to od Ciebie zależy kodowanie oprogramowania.
Dostępne jest również opakowanie Pythona .
źródło