Parsing made fun
2009.08.10. 17:12
Na ez az, ami eddig sosem jutott eszembe. Mármint az, hogy a parsing (adatstruktúrák felbontása, elemzése) vidám dolog is lehet.
Legutóbb például -amikor pythonban írtam OpenBSM parsert- határozottan éreztem, hogy kell legyen valami jobb mód is erre, de egy-két gyengére sikerült keresés után elraktároztam magamban, hogy ha van is, mélyebbre kell ásnom.
Azóta nem kellett újabb formátumot megértenem, és feldolgoznom, így nem is kerestem ilyen eszközt, de ma szembe jött velem a megoldás a levelezőmben a "py-construct" nevű FreeBSD csomag személyében.
A cucc weblapjának nézegetése közben a szerző "miért kellett még egy n. parsert írnod B+?" FAQ-ra adott válaszát teljesen át tudtam érezni:
Before I wrote Construct, I did a little research on the subject, and looked at things like ethereal, the protocol analyzer. I thought ethereal must have some uniform way of defining it's dissectors, since they parse anything from ARP to X11.
But to my great disappointment, I found a directory of more than 850 hand-written ad-hoc C files, some more than 200KB in size, some looking like ASCII-art code. Moreover, ethereal doesn't use an object to hold the parsed information -- it simply adds it directly to the GUI textually using format strings. Ugh.
When I realized most other parsers/unpackers work that way, I set off to write yet another parser.
Valami hasonlót éreztem én is múltkor.
A modul Wikipedia-lapján könnyen érhető példa van a TCP/IP/Ethernet parse-olására, a forrásban pedig előre készen van pár sűrűbben használt protokoll (DNS, UDP, IP pld), meg formátum (PNG, ELF32 stb).
Igen nagy kár, hogy a news szekció nem mutat túl nagy aktivitást:
News
- 2007.11.03 - added BML, a simple Binary Markup Language (like binary XML)
- 2007.04.09 - The PNG file format has been added to the SVN
- 2007.02.10 - Generating ASTs with Construct -- see the Sheep project
- 2007.01.20 - The Construct Community Effort wiki has been created
- 2007.01.19 - The Construct's coding-style guidelines
- 2007.01.12 - 2.00 is out. See the release notes
Ha időm engedi, megnézem, sokszor kellett volna már egy DNS/LDAP/DHCP/stb parser, aminek beadva a lementett, vagy real-time érkező csomagokat megnézhetem pld. egy szerver válaszidejét, vagy a válaszadás sikerességét.
Aki ismer, használ hasonlót (akármilyen más nyelven), ne legyen rest beírni a kommentekhez!
A bejegyzés trackback címe:
Kommentek:
A hozzászólások a vonatkozó jogszabályok értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a Felhasználási feltételekben és az adatvédelmi tájékoztatóban.