Esempio n. 1
0
    def test_pcap2ammo_output_file(self, prepare_data_file, capsys):
        """Check pcap2ammo write result in output file correctly"""

        http_request = "GET https://rambler.ru/ HTTP/1.1\r\n" + \
                       "Host: rambler.ru\r\n" + \
                       "Content-Length: 0\r\n\r\n"
        ethernet = pcap_gen.generate_custom_http_request_packet(http_request)
        data = [{'timestamp': 1489136209.000001, 'data': ethernet.__bytes__()}]
        filename = prepare_data_file(data)
        output_filename = tempfile.NamedTemporaryFile(delete=False).name
        pcap2ammo.pcap2ammo({
            'input': filename,
            'output': output_filename,
            'stats_only': False,
            'add_header': [],
            'delete_header': [],
            'filter': None,
            'http_filter': None
        })
        captured = capsys.readouterr()
        assert captured.out == "", "output is not empty"
        file_content = open(output_filename, 'rb').read().decode("utf-8")
        os.remove(output_filename)
        assert file_content == \
            str(len(http_request)) + " \n" + \
            http_request, "unexpected output file content"
Esempio n. 2
0
    def test_pcap2ammo_delete_header(self, prepare_data_file, capsys):
        """Check delete-header argument works correctly"""

        http_request = "GET https://rambler.ru/ HTTP/1.1\r\n" + \
                       "Host: rambler.ru\r\n" + \
                       "Content-Length: 0\r\n\r\n"
        http_request_without_header = \
            "GET https://rambler.ru/ HTTP/1.1\r\n" + \
            "Host: rambler.ru\r\n\r\n"
        ethernet = pcap_gen.generate_custom_http_request_packet(http_request)
        data = [{'timestamp': 1489136209.000001, 'data': ethernet.__bytes__()}]
        filename = prepare_data_file(data)
        pcap2ammo.pcap2ammo({
            'input': filename,
            'output': None,
            'stats_only': False,
            'add_header': [],
            'delete_header': ['content-length'],
            'filter': None,
            'http_filter': None,
        })
        captured = capsys.readouterr()
        assert captured.out == \
            str(len(http_request_without_header)) + " \n" + \
            http_request_without_header, "unexpected output"
Esempio n. 3
0
    def test_pcap2ammo_http_filter(self, prepare_data_file, capsys):
        """Check main function parse input file with filter correctly"""

        http_request = "GET / HTTP/1.1\r\n" + \
                       "Host: rambler.ru\r\n" + \
                       "Content-Length: 0\r\n\r\n"
        params = {'ip': {'src': socket.inet_aton('10.4.0.136')}}
        ethernet = pcap_gen.generate_custom_http_request_packet(
            http_request, params)
        data = [{'timestamp': 1489136209.000001, 'data': ethernet.__bytes__()}]
        filename = prepare_data_file(data)

        # match filter
        pcap2ammo.pcap2ammo({
            'input':
            filename,
            'output':
            False,
            'stats_only':
            False,
            'add_header': [],
            'delete_header': [],
            'filter':
            None,
            'http_filter':
            '"rambler.ru" == http.headers["host"]'
        })
        captured = capsys.readouterr()
        assert captured.out == \
            str(len(http_request)) + " \n" + \
            http_request, "unexpected output"

        # unmatch filter
        pcap2ammo.pcap2ammo({
            'input':
            filename,
            'output':
            False,
            'stats_only':
            False,
            'add_header': [],
            'delete_header': [],
            'filter':
            None,
            'http_filter':
            '"rambler.ru" != http.headers["host"]'
        })
        captured = capsys.readouterr()
        assert captured.out == "", "unexpected output"
Esempio n. 4
0
    def test_pcap2txt_main(self, prepare_data_file, capsys):
        """Check main function is worked out properly"""

        http_request = "GET https://rambler.ru/ HTTP/1.1\r\n" + \
                       "Host: rambler.ru\r\n" + \
                       "Content-Length: 0\r\n\r\n"
        ethernet = pcap_gen.generate_custom_http_request_packet(http_request)
        data = [{'timestamp': 1489136209.000001, 'data': ethernet.__bytes__()}]
        filename = prepare_data_file(data)
        with mock.patch.object(pcap2txt.sys, 'argv',
                               ['pcap2txt.py', filename]):
            pcap2txt.main()
        captured = capsys.readouterr()
        # for python2 captured.err
        # for python3 captured.out
        assert captured.out == \
            "1489136209.000001: [10.10.10.1:40318 -> 10.10.10.2:8888]\n" + \
            http_request + "\n", "unexpected output"
Esempio n. 5
0
    def test_pcap2txt_stats_only(self, prepare_data_file, capsys):
        """Check stats-only flag handled correctly"""

        http_request = "GET https://rambler.ru/ HTTP/1.1\r\n" + \
                       "Host: rambler.ru\r\n" + \
                       "Content-Length: 0\r\n\r\n"
        ethernet = pcap_gen.generate_custom_http_request_packet(http_request)
        data = [{'timestamp': 1489136209.000001, 'data': ethernet.__bytes__()}]
        filename = prepare_data_file(data)
        pcap2txt.pcap2txt({
            'input': filename,
            'output': False,
            'stats': False,
            'stats_only': True,
            'filter': None,
            'http_filter': None,
        })
        captured = capsys.readouterr()
        assert captured.out == \
            "Stats:\n\ttotal: 1\n\tcomplete: 1\n\t" + \
            "incorrect: 0\n\tincomplete: 0\n", "unexpected output"
Esempio n. 6
0
    def test_pcap2txt_input_file(self, prepare_data_file, capsys):
        """Check main function parse input file correctly"""

        http_request = "GET https://rambler.ru/ HTTP/1.1\r\n" + \
                       "Host: rambler.ru\r\n" + \
                       "Content-Length: 0\r\n\r\n"
        ethernet = pcap_gen.generate_custom_http_request_packet(http_request)
        data = [{'timestamp': 1489136209.000001, 'data': ethernet.__bytes__()}]
        filename = prepare_data_file(data)
        pcap2txt.pcap2txt({
            'input': filename,
            'output': False,
            'stats': False,
            'stats_only': False,
            'filter': None,
            'http_filter': None,
        })
        captured = capsys.readouterr()
        assert captured.out == \
            "1489136209.000001: [10.10.10.1:40318 -> 10.10.10.2:8888]\n" + \
            http_request + "\n", "unexpected output"
Esempio n. 7
0
    def test_parse_filter_and_http_filter(self, prepare_data_file, capsys):
        """Check main function parse input file with excluding filter
        correctly"""

        http_request = "GET https://rambler.ru/ HTTP/1.1\r\n" + \
                       "Host: rambler.ru\r\n" + \
                       "Content-Length: 0\r\n\r\n"
        params = {'ip': {'src': socket.inet_aton('10.4.0.136')}}
        ethernet = pcap_gen.generate_custom_http_request_packet(
            http_request, params)
        data = [{'timestamp': 1489136209.000001, 'data': ethernet.__bytes__()}]
        filename = prepare_data_file(data)

        # match filter
        pcap2txt.pcap2txt({
            'input': filename,
            'output': False,
            'stats': False,
            'stats_only': False,
            'filter': 'ip.src == 10.4.0.136',
            'http_filter': '"rambler" in http.uri',
        })
        captured = capsys.readouterr()
        assert captured.out == \
            "1489136209.000001: [10.4.0.136:40318 -> 10.10.10.2:8888]\n" + \
            http_request + "\n", "unexpected output"

        # unmatch filter
        pcap2txt.pcap2txt({
            'input': filename,
            'output': False,
            'stats': False,
            'stats_only': False,
            'filter': 'ip.src == 10.4.0.136',
            'http_filter': '"rambler" not in http.uri',
        })
        captured = capsys.readouterr()
        assert captured.out == "", "unexpected output"
Esempio n. 8
0
    def test_pcap2ammo_add_header_wrong_format(self, prepare_data_file,
                                               capsys):
        """Check wrong formated add-header argument is handled correctly"""

        http_request = "GET https://rambler.ru/ HTTP/1.1\r\n" + \
                       "Host: rambler.ru\r\n" + \
                       "Content-Length: 0\r\n\r\n"
        ethernet = pcap_gen.generate_custom_http_request_packet(http_request)
        data = [{'timestamp': 1489136209.000001, 'data': ethernet.__bytes__()}]
        filename = prepare_data_file(data)
        pcap2ammo.pcap2ammo({
            'input': filename,
            'output': False,
            'stats_only': False,
            'add_header': ['Referer'],
            'delete_header': [],
            'filter': None,
        })
        captured = capsys.readouterr()
        assert captured.err == \
            'Error: Wrong header format, expected ' + \
            "\"<header_name>: <header_value>\"\n", \
            "unexpected output"
Esempio n. 9
0
    def test_pcap2txt_output_file(self, prepare_data_file, capsys):
        """Check pcap2txt write result in output file correctly"""

        http_request = "GET https://rambler.ru/ HTTP/1.1\r\n" + \
                       "Host: rambler.ru\r\n" + \
                       "Content-Length: 0\r\n\r\n"
        ethernet = pcap_gen.generate_custom_http_request_packet(http_request)
        data = [{'timestamp': 1489136209.000001, 'data': ethernet.__bytes__()}]
        filename = prepare_data_file(data)
        pcap2txt.pcap2txt({
            'input': filename,
            'output': 'test.out',
            'stats': False,
            'stats_only': False,
            'filter': None,
            'http_filter': None,
        })
        captured = capsys.readouterr()
        assert captured.out == "", "output is not empty"
        file_content = open('test.out', 'rb').read().decode("utf-8")
        assert file_content == \
            "1489136209.000001: [10.10.10.1:40318 -> 10.10.10.2:8888]\n" + \
            http_request + "\n", "unexpected output"
        os.remove('test.out')