Ethereal-dev: Re: [Ethereal-dev] Python bindings for libethereal

Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.

From: Gerald Combs <gerald@xxxxxxxxxxxx>
Date: Fri, 20 May 2005 15:03:30 -0500
Could we use this to reimplement Ethereal's GUI in wxPython, assuming we
were that masochistic?

Michael Cohen wrote:
> Hi list,
>   I have started writing a python binding to ethereal. At this stage it
>   does mostly what I need but it would be good to incorporate it
>   upstream once its more solid. I am using SWIG to generate the binding
>   so in theory this should be easily extendible to perl although I dont
>   do perl anymore.
> 
>   Here is the code for those that want to try it:
>   http://pyflag.sourceforge.net/pyflag/_darcs/current/pyethereal/
> 
>   Although it is part of the pyflag codebase this part is pretty stand
>   alone. Currently the makefile copies all the files into the ethereal
>   source tree (after it was built) and builds the binding. Note that
>   some editing of the makefile might be required for standalone
>   compiles.
> 
>   This is the kind of thing you can do with this binding at present:
>   import pyethereal
> 
>   ## This opens the capture file and returns an opaque wiretap object
>   f=pyethereal.open_file(FILENAME)
>   
>   ## This reads and dissects the next packet off the wiretap handle. We
>   ## get a dissection object which represents the dissection tree
>   n=pyethereal.ReadPacket(f)
>   
>   ## This gets the tree, pulls the first child and iterates over all the
>   ## nodes at that level. Note that i is a Node object, printing it
>   ## yields the representation
>   for i in n.get_child():
>       print i
>    
>   Sample output:
> 
>   >Frame 0 (74 bytes on wire, 74 bytes captured)
>   >Ethernet II, Src: 00:11:50:63:6b:32, Dst: 00:0f:66:01:6c:ea
>   >Internet Protocol, Src Addr: 192.168.1.34 (192.168.1.34), Dst Addr:
>   >203.31.48.7 (203.31.48.7)
>   >User Datagram Protocol, Src Port: 33453 (33453), Dst Port: 53 (53)
>   >Domain Name System (query)
>      
>   ## We can reference the dissection object to pull out a node of a
>   ## particular abbreviation.  The value method returns the value in the
>   ## node in its native type (in this case int).
>   v=n['udpi.srcport'].value()
>   print v,type(v)
> 
>   Sample Output:
>   33453 <type 'int'>
>   
>   In my project I need to keep persistant information about packets
>   (stored in the database). I store the offsets and lengths of all the
>   packets in the pcap file (obtained using wiretap). I then want to
>   dissect packets by reading the binary data from python and dissecting
>   on demad (i.e. not from a pcap file). This following object does this:
> 
>   ## We open and read binary packet data (The offsets and lengths are
>   ## obtained using wiretap.)
>   fd=open(FILENAME)
>   fd.seek(40)
>   data=fd.read(74)
> 
>   ## We dissect this data as frame number 10:
>   n=pyethereal.Packet(data,10)
> 
>   ## Print all the properties of the frame
>   for i in n['udp'].get_child():
>   	print i
> 
>   Sample Output:
> 
>   User Datagram Protocol, Src Port: 33453 (33453), Dst Port: 53 (53)
>   Source port: 33453 (33453)
>   Destination port: 53 (53)
>   Source or Destination Port: 33453
>   Source or Destination Port: 53
>   Length: 40
>   Checksum: 0x9050 (correct)
>   
>   See the file test.py for more info at the above url.
> 
>   Michael
> 
> _______________________________________________
> Ethereal-dev mailing list
> Ethereal-dev@xxxxxxxxxxxx
> http://www.ethereal.com/mailman/listinfo/ethereal-dev