如何将pcapy输出解码为可读格式?

时间:2016-10-02 09:18:41

标签: python byte libpcap

我正在使用Python 3从pcapy输出中检索HTTP标头。这应该不是那么困难,但是我很难将数据包变成可读的东西,这使我无法继续下去。我只允许使用pcapy和其他Python标准库工具。

(function(){
  angular.module('test', []);
  angular.module('test')
    .controller('MainController', MainController)
    .directive('modelGatherer', modelGatherer)
    .directive('gatheredModelDisplay', gatheredModelDisplay);
  
  MainController.$inject = [];
  
  function MainController() {
    var vm = this;
    vm.displayed = true;
  }
  
  function modelGatherer() {
    modelGathererController.$inject = ['$scope'];
    
    function modelGathererController($scope) {
      var vm = this;
      vm.ngModels = [];
      
      vm.addModel = addModel;
      
      //
      function addModel(model) {
        if(angular.isDefined(model)) {          
          vm.ngModels.push(model);
        }
      }
    }
    
    return {
      restrict: 'A',
      scope: true,
      require: 'modelGatherer',
      controller: modelGathererController,
      priority: 5000,
      link: link
    };
    
    function link(scope, element, attrs, ctrl) {      
      
      var ngModelElements = Array.prototype.slice.call(element[0].querySelectorAll('[ng-model]'));                 
      
      ngModelElements
      .map(toNgModelController)
      .forEach(addToCtrl);
      
      
      //
      function toNgModelController(val) {
        return angular.element(val).controller('ngModel');          
      }
      
      function addToCtrl(val) {
        ctrl.addModel(val);
      }
    }
  }
  
  function gatheredModelDisplay() {
    return {
      restrict: 'E',
      require: '^modelGatherer',
      template: '<pre>{{ctrlNames | json}}</pre>',
      scope: true,
      link: link
    };
    
    function link(scope, element, attrs, ctrl) {
      scope.ctrlNames = [];
      
      scope.$watch(getNgModelCtrls, onNgModelCtrlChange, true);
      
      //
      function getNgModelCtrls() {
        return ctrl.ngModels;
      }
      
      function onNgModelCtrlChange(newVal) {
        scope.ctrlNames = newVal.map(toName);
        
        //
        function toName(val) {
          return val.$name;
        }
      }
    }
  }
})();

返回数据包的字节字符串(任何数据包):

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
<div ng-app="test" ng-controller="MainController as main">
  <form no-validate model-gatherer>    
    <input type="text" name="test1" placeholder="test1" ng-model="main.test1" />
    <input type="text" name="test2" placeholder="test2" ng-model="main.test2" />
    <input type="text" name="test3" placeholder="test3" ng-model="main.test3" />
    <div ng-if="main.displayed">
      <input type="text" name="test4" placeholder="test4" ng-model="main.test4" />
    </div>    
    <div ng-switch="main.displayed">
      <input ng-switch-when="true" type="text" name="test5" placeholder="test5" ng-model="main.test5" />
    </div>
    <div ng-show="main.displayed">      
      <input type="text" name="test6" placeholder="test6" ng-model="main.test6" />
    </div>
    <gathered-model-display />
  </form>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.min.js"></script>
</body>
</html>

返回的有效负载的某些部分是人类可读的,而其他部分则不是,我认为是用ASCII编码的。

此时我迷路了,因为我们刚刚被告知我们可以“编写我们自己的结构”来解析这些数据,而不知道它是如何工作的。

如何在保留已经人类可读的内容的同时解码剩余的字节串? HTTP标头已经显示,但我很有兴趣检索与标头关联的源和目标IP地址。

0 个答案:

没有答案