路由器路由联盟

绵羊墙(Wi-Fi sheep)搭建其二

2017-01-18  本文已影响0人  Zzifan

本篇内容

这篇文章会简单地描述如何使用pyshark进行网络包的分析。

如何用pyshark包进行网络包的解析

具体代码

代码清单一:

cap = pyshark.FileCapture(filename)
for pkt in cap:
       if pkt.highest_layer == "URLENCODED-FORM":
                       layer = pkt[pkt.highest_layer]
           layer_generator = layer._get_all_field_lines()
                       text = ""
           for line in layer_generator:
               text += line

上面这段代码中我们得到了一个包中的POST方法提交的表中内容的字符串格式。在开发过程中我发现pyshark并没有提供一个封装好的接口用于获取包中的内容。而他提供的用于获取field内容的get_field函数并不能满足要求。

代码清单二:

    def get_field(self, name):
        """
        Gets the XML field object of the given name.
        """
        for field_name, field in self._all_fields.items():
            if self._sanitize_field_name(name) == self._sanitize_field_name(field_name):
                return field

      def _get_all_field_lines(self):
        """
        Returns all lines that represent the fields of the layer (both their names and values).
        """
        for field in self._get_all_fields_with_alternates():
            if field.hide:
                continue
            if field.showname:
                field_repr = field.showname
            elif field.show:
                field_repr = field.show
            else:
                continue
            yield '\t' + field_repr + os.linesep

这两个函数是由pyshark提供的函数。但很遗憾get_field()只返回第一个内容,因此我们需要自己通过调用其私有函数_get_all_field_lines()去获取其文本完成内容匹配,虽然这并不是一种很良好的做法。

代码清单三:

for usernamePat in userNamePatternList:
                if usernamePat in text:
                    prePos = text.find(usernamePat)
                    username = text[text.find('=',prePos)+3:text.find('\n\t',prePos)-1]
                    break;

这段函数中我检查所有预定义的用户名样式有没有出现,如果出现我就用字符串提取将他们提取出来。之后就是将他们存入数据库中供webUI显示了。

完整的代码可以在github上看到:
Wi-Fi sheep

下一篇内容

我是如何对这个项目进行优化的

上一篇 下一篇

猜你喜欢

热点阅读