Alt-F4 #32 - Operace Wireshark  23-04-2021

Napsal The-Kool, Hornwitser, upravil stringweasel, Nanogamer7, Conor_, Therenas, Firerazer,
přeložil oof2win2

Obsah

Vítejte u žraloky-plného 2⁵ vydání Alt-F4. V těchto zrádných vodách, The-Kool nás vede k používání reproduktorů k dobré věci, možná i jako varovací systém proti žralokům, v nejnovější epizodě Rohu Komplexity! Poté, Hornwitser se dostane k doopravdovému lovení žraloků s použitím Wiresharku, vysvětlí jak vysledoval síťové problémy, které našel v hře. Vezměte si harpunu a skočte dále!

Roh Komplexity: Reproduktory The Kool

Vítejte zpět do Rohu Komplexity, kde se koukáme na méně používané nebo více komplexní mechaniky hry, abychom dali úvod těm, kteří s nimi nejsou seznámeni. V tomto článku se budeme ptát na tři otázky: ‘Co to je?’, ‘Jaké výsledky to dává?’ a ‘Kde by to mělo být používáno?’.

Co to je?

Programovatelný reproduktor je ‘budova’, která používá pouze jednu dlaždici. Když je připojen na obvod, je schopen vytvářet zvuky, které můžete slyšet ve hře, na bázi signálů v obvodu. Můžete měnit hlasitost, zvolit aby hrál specifický zvuk, říct mu aby byl slyšet nezáleže na tom, jak daleko jste, a i vytvořit vlastní poplach na mapě. Reproduktor je odemknut s technologií Obvody, která je tak brzo v kmenu technologií, že by mohla být vaše první odemknutá zelená technologie.

Programovatelný reproduktor
Tam stojí, ve vší magické slávě. Zdroj: Factorio Wiki.

Jaké výsledky to může dát?

Dělá zvuky! Dobře, to bylo tak trochu jasné. Zatímco reproduktory jsou nejlépe známy pro hudební výtvory, které s nimi lidi staví, mají také praktické užití. Pokud připojíte reproduktor k vaší továrně a nastavíte globální zvuk a ikonu poplachu, můžete si nastavit vlastní informace pro docela vše. Můžete (a měli by jste!) přidat vaši vlastní ikonu a název, protože jasně zapomenete, pro co je řvoucí klakson. Toto je lehký způsob, jak vysílat poplach přes vaši celou továrnu a pomoci vám zachytit příznaky problémů, než se stanou pravými problémy.

Kde by to mělo být použito?

Zvyšovali jste někdy konzumaci energie a omylem zpomalili těžiče uhlí, což vás poslalo do spirály nedostatku energie, mezitím co vaše boilery lapají po palivu? Zkuste položit reproduktor vedle pásu na uhlí, který vede k vašim boilerům a zapojte ho k pásu kabelem. Plný pás má kapacitu 8 itemů, tak když nastavíte reproduktor, aby se spustil při méně než 8 uhlí, poplach se spustí, když bude někde mezera na vašem pásu pro uhlí. Nastavte tento poplach na globální zkuk a dejte mu jméno jako “Podívej se na svou těžbu uhlí!” a dostanete oznámení, nezáleže na tom, kde jste nebo čím se zabýváte.

Alarmový systém pro uhlí
Pokud se toto spustí, je čas nechat toho, co děláte a opravit vaši těžbu uhlí. Plán

Kompletně jiný typ varování je varování na blízké vlaky. Připojte reproduktor k kolejovému signálu na vašich kolejích kde by jste chtěli přecházet, také jeden signál v obou směrech (buďte si jisti, že dáte signály na obě strany železnice). Řekněte mu, aby spustil lokální varování pokud jakýkoli z signálů je žlutý (počet žlutých signálů > 0). Příště, když půjdete k železničnímu přechodu a bude na cestě vlak, budete slyšet hezkou, hlasitou sirénu, která vám bude říkat ať počkáte!

Alarmový systém na projíždějící vlaky
Kéž bych toto vymyslel před pár sty hodinami... Plán

Jako mnoho dalších věcí v Factoriu, použití reproduktorů jsou nekonečná, obojí v praktičnosti a kreativitě. Stavby mohou být jak lehké jako můžete vidět výše, až po super komplexní midi přehrávače a dále. Doufám, že vás toto inspiruje, aby jste přišli k jedné z vašich vlastních a ušetří vám to pár migrén. Do příště, uvidím vás na tovární podlaze… a dávejte si pozor, kam šlapete!

Wiresharkový pitvač pro Factorio Hornwitser

Toto je projekt, který začal kolem času eventu Gridlock Cluster. Hledal jsem důvody problémů, proč jsou někteří klienti náhodně vyhazováni z hry, což mě přivedlo k zkoumání packetových záznamů zkrz použití Wiresharku. Tyto tracy packetů jsou v podstatě binární logy packetů, které jsou posílány a obdrženy síťovou kartou na počítači, který je zaznamenal. Abychom pochopili co tato binární data znamenají, Wireshark je dekóduje s protokolovými pitvači, což je něco, co Wireshark má pro protokoly v skoro všech částí síťaření. Ale nepřichází s pitvačem na Factorio, tak když jsem použil Wireshark na Factorio, vše co jsem mohl vidět byl hexadecimální bordel, který se posílal mezi serverem a klientem.

Po chvilce koukání na bajty, které se posílaly tam a zpět mezi serverem a klientem, zapřemýšlel jsem: Jak těžké by bylo napsat pitvač pro Wireshark na dekódování dat? Podíval jsem se do toho, a zjistil jsem, že nejlehčí způsob na to, by bylo napsat plugin v jazyku Lua, který se poté dá naloadovat do Wiresharku, systém ne tak daleko od Factorio módů. A tak se stalo, že jsem se začal dívat na bajty v hexadecimálech a zjišťoval jsem strukturu celku. Byla to taková osobní výzva, zjistit co každý z bajtů znamenal a dekódovat je do Wiresharku. Pracoval jsem na pitvači asi tak dva týdny, než jsem se toho vzdal.

Nebylo to, že bych to nemohl dát. Nebylo to pouze hodnotu času, který jsem do toho dal. Výstup pitvače nebyl tak užitečný s tím, že by mi říkal, co se dějě. Vypadal nějak takhle:

Výstup starého Wireshark pitvače

Jasně, dekódovalo by to rámování a dalo by to dohromady rozbité kusy, ale dokud nevíte co ty podivná, zvláštní nebo barevná data znamenají, nebude to k ničemu. Toto je také jeden z důvodů, proč jsem tento pitvač nepublikoval: Je lepší než koukání se na hexadecimální data, ale ne o moc. Neposvítí na vnitřní procesy protokolu Factoria, což by jste očekávali od jakékoli jiného pitvacího pluginu na Wireshark. A tak se stalo, že tento projekt byl dán na poličku, a nepodíval jsem se na něj dále.

V minulosti, Factorio vývojář Twinsen mluvil o vývoji pitvače pro Wireshark v FFF #196. Tento post obsahuje docela dost interních informací o protokolu, které jsem mohl použít při vývoji mého pitvače, ale vybral jsem si nedívat se na to, protože jsem ho chtěl vytvořit bez toho, aniž bych se díval na interní informace z zdrojového kódu hry. Jasná otázka ale zní: Proč nepoužít plugin od Twinsena? Pro začátek, plugin od Twinsena není veřejný, ale důležitěji, nemůže být veřejný. Způsob, jak Twinsenův pitvač fungoval bylo postavením Factoria jako sdílené knihovny, poté postavěním vlastní verze WIresharku, která se připojila na sdílenou knihovnu. Teď, Wireshark je licencován pod GPL, a není vám povoleno distribuovat GPL kód, který se připojuje na proprietární kód, takže aby mohli distribuovat pitvač, Wube by musel distribuovat Factorio pod GPL licencí, což se očividně nestane.

Před pár týdny jsem si ale něco uvědomil. Windowsová verze Factoria má dodatečný .pdb soubor, který obsahuje debugové znaky. Vývojáři je používají na generaci symbolizovaného stack tracu když hra spadne, aby mohli vědět kde spadla. Naštěstí pro mě, má to také další debugová data, jako druh, který je potřeba na připojování debuggera k Factoriu a inspekci hodnot uložených v paměti. To znamená, že to obsahuje typové informace, které jsou struktura dat, jak jsou definované v kódu, a také jména hodnot a enumy. Jména hodnot jsou velmi užitečná, protože je to označení, které vývojáři dávají na části dat, aby to mohli referencovat v kódu. Rovněž, enumy obsahují mapující hodnoty logických jmen na numerické hodnoty.

Byl jsem schopen vysypat tyto informace z .pdb souboru do něčeho čitelného pomoci nástroje ‘cvdump.exe’. Když jsem to měl, bylo docela lehké najít jména všech struktur z .pdb souboru a přejmenovat všechny hodnoty, aby je mohl můj pitvač používat. Po trošce uklízení kódu a prezentaci, byl jsem schopen vytvořit toto z výstupu pitvače:

New Wireshark dissector screenshot

Už nemusíte hádat co je hodnota “Odd Blue”: Je to očividně id nějakého InputActionSegment. Teď, typy jsou přeloženy z počítačového kódu jako 0xa2 na něco mnohem přívětivějšího jako ServerCommand. Jediný problém, který jsem s výrobou pitvače měl, je používání dat, která jsou v hře, a tímpádem nejsou moje originální práce. Místo toho, abych přemýšlel jestli právo copyrightu je na mé straně nebo ne, zeptal jsem se Factorio vývojářů a oni mi řekli, že jsou v pořádku s tím, že toto budu dávat veřejnosti. Pokud si to tedy chcete zkusit a přidat si tento nástroj do vašeho kufříku nářadí, můžete najít můj repozitář na GitHubu.

Osobně, použil jsem to na vyšetřování síťových problémů s Factoriem, od klientů, kteří se odpojují až po nefunkční NAT děrování. Také jsem napsal pár oznámení o bugech, které byly založeny na mých zjištění, což vylepšilo hru samotnou. S posunem k používání jmen z Factorio debugových znaků, data, která mohou být vidět jsou čisté a informativní, alespoň oproti tomu, co bylo vidět předtím. Je to pořád více nástroj pro lidi, kteří jsou již seznámeni s počítačovými síti a interními věcmi Factoria ale, tak neočekávejte, že by jste chápali co všechno z tohoto znamená, pokud si s těmito věcmi nejste známi.

Přispívání

Jako vždy, hledáme lidi, kteří chtějí přispívat k Alt-F4, buď to je přidáváním zajímavěho článku nebo překladem. Pokud máte něco zajímavého na mysli co by jste chtěli sdílet s komunitou v hezkém způsobu, toto je ideální místo kde o tom diskutovat. Pokud si nejste moc jisti o tom, rádi pomůžeme s diskuzí nápadů o obsahu a strukturování otázek. Pokud to zní jako něco zajímavého, připojte se na Discordu aby jste začali!