Fork časti HTTP komunikace

Rnx

Fork časti HTTP komunikace
« kdy: 05. 11. 2024, 12:51:01 »
Ahoj, ako by ste riešili fork http komunikácie, kde na jednej strane (klient) odošle http POST, a v prípade že na druhej strane server odpovie OK (200), tak tento load od klienta bude forknutý aj na tretiu stranu? Server nemám možnosť ovplyvniť, klient (rôzni klienti) bude posielať i rôzne GETy, ktoré by mali byť ignorované, resp. iné http statusy než 200 taktiež. Utilita môže byť "in the middle", so všetkým čo k tomu patrí (vlastné tls, ip:port, java, .net, čokoľvek). Dokáže toto nejaký opensource?


Bugsa

  • ***
  • 128
    • Zobrazit profil
    • E-mail
Re:Fork časti HTTP komunikace
« Odpověď #1 kdy: 05. 11. 2024, 14:32:20 »
Jaký to má use case? Proč nemůže klient po obdržení 200 od serveru prostě poslat nový GET/POST na třetí stranu?

Re:Fork časti HTTP komunikace
« Odpověď #2 kdy: 05. 11. 2024, 16:02:01 »
Zvládlo by to istio https://istio.io/latest/docs/tasks/traffic-management/mirroring/ dá se tam nastavit i policy, že se to aplikuje jen na POST, případně mimo kubernetes envoy.

Případné přesné nastavení bych si asi vygeneroval přes ChatGPT než se patlat v dokumentaci.

Re:Fork časti HTTP komunikace
« Odpověď #3 kdy: 05. 11. 2024, 18:45:15 »
Musíte klonovat všechny požadavky typu POST (případně podle dalších kritérií), a pak na základě odpovědi odfiltrovat ty, které vás nezajímají. Nejprve se posílá požadavek, pak teprve na něj přijde odpověď, takže v době mirrorování požadavku ještě neznáte odpověď a nevíte, zda je to ten, který vás zajímá.

Asi to půjde nakonfigurovat v lepších reverzních proxy, případně můžete použít mitmproxy.

_Jenda

  • *****
  • 1 605
    • Zobrazit profil
    • https://jenda.hrach.eu/
    • E-mail
Re:Fork časti HTTP komunikace
« Odpověď #4 kdy: 05. 11. 2024, 20:05:37 »
Ahoj, ako by ste riešili fork http komunikácie, kde na jednej strane (klient) odošle http POST, a v prípade že na druhej strane server odpovie OK (200), tak tento load od klienta bude forknutý aj na tretiu stranu? Server nemám možnosť ovplyvniť, klient (rôzni klienti) bude posielať i rôzne GETy, ktoré by mali byť ignorované, resp. iné http statusy než 200 taktiež. Utilita môže byť "in the middle", so všetkým čo k tomu patrí (vlastné tls, ip:port, java, .net, čokoľvek). Dokáže toto nejaký opensource?
Ano, toto jsem dělal tak, že jsem si napsal program v Pythonu, který se tvářil jako HTTP server (socketserver.StreamRequestHandler - HTTP implementováno naivně jako "přečtu první řádek požadavku a rozhodnu se jestli je to POST/GET/..."), požadavek přeposlal (req = urllib.request.Request(url); req.add_header(hlavičky_původního_požadavku)) a pak zase odpověď poslal zpátky. Klient pak tento server používal jako HTTP proxy (šlo by i bez spolupráce klienta pomocí MITM).

Nerozumím tedy co znamená "forknutý aj na tretiu stranu" - jako že ho někomu vnutíš (jak? HTTP vyžaduje aby klient nejdřív poslal požadavek)? Nebo že ho uložíš do souboru?


Re:Fork časti HTTP komunikace
« Odpověď #5 kdy: Dnes v 09:05:51 »
Kolega to kdysi dělal pro účel záznamu, co uživatel dělá a kam leze, a pozdější replay za účelem vyhodnocení.

Zopper

  • *****
  • 771
    • Zobrazit profil
Re:Fork časti HTTP komunikace
« Odpověď #6 kdy: Dnes v 09:42:37 »
Otázka ovšem nezní jako logování. Pokud už můžu mít uprostřed cesty vlastní MITM, můžu tam rovnou tvořit logy, a bude to mnohem snazší, než nějaké forkování. Spíš to na mě působí jako nějaký divný pokus o přihlášení k více systémům najednou, nebo nějaký podobný případ, ale tam mi to taky nedává smysl - klient nemůže dostat odpověď z více serverů. Záhady, samé záhady.