diff options
author | Sebastien Tandel <sebastien@tandel.be> | 2009-05-29 21:10:40 +0000 |
---|---|---|
committer | Sebastien Tandel <sebastien@tandel.be> | 2009-05-29 21:10:40 +0000 |
commit | 52cc5fb1e86ac8007eabe1291bf543d3803f7148 (patch) | |
tree | 0ee2757e438e9d9db9dd0ddab19f0e84f3f29f03 /epan/wspython/register-dissector.py | |
parent | cb4f0a40c23a3247fbb74a74dc117cbef4f83bf4 (diff) |
python binding for wireshark (first commit)
* ability to write dissectors with python for wireshark.
documentation (http://wiki.wireshark.org/Python)
svn path=/trunk/; revision=28529
Diffstat (limited to 'epan/wspython/register-dissector.py')
-rw-r--r-- | epan/wspython/register-dissector.py | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/epan/wspython/register-dissector.py b/epan/wspython/register-dissector.py new file mode 100644 index 0000000000..e05bfbcc37 --- /dev/null +++ b/epan/wspython/register-dissector.py @@ -0,0 +1,76 @@ +# register-dissector.py +# +# $Id: $ +# +# Wireshark Protocol Python Binding +# +# Copyright (c) 2009 by Sebastien Tandel <sebastien [AT] tandel [dot] be> +# Copyright (c) 2001 by Gerald Combs <gerald@wireshark.org> +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +import sys +import re +import os +import imp + +# +# Build a list of files belonging to a directory and matching a regexp (f.e. +# '(?P<plugin>.*)\.py$' ) +# +def get_plugin_list(dir, regexp): + lDir = os.listdir(dir) + + lPlugins=[] + for sDir in lDir: + MatchedObject = re.match(regexp, sDir) + if (MatchedObject != None): + lPlugins.append(MatchedObject.group("plugin")) + return lPlugins + +#Import the module "name" +def plugin_import(name): + #if the module was already loaded + try: + return sys.modules[name] + except KeyError: + pass + + return __import__(name) + +def register_dissectors(dir): + #append dir to be able to import py_lib + sys.path.append(dir) + from wspy_libws import get_libws_handle + libws = get_libws_handle() + + dissectors_dir = os.path.join(dir, "wspy_dissectors") + #append dir to be able to import python dissectors + sys.path.append(dissectors_dir) + + registered_protocols = [] + #Read all python dissectors + try: + dissectors = get_plugin_list(dissectors_dir, "(?P<plugin>.*)\.py$") + #For each dissector, register it and put it in the list of registered + #protocols + for dissector in dissectors: + d = plugin_import(dissector) + registered_protocol = d.register_protocol() + if registered_protocol: + registered_protocols.append(registered_protocol) + except Exception, e: + print e + + return registered_protocols |