traffic-taffy 0.8.5__py3-none-any.whl → 0.9__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. traffic_taffy/__init__.py +1 -1
  2. traffic_taffy/algorithms/__init__.py +14 -7
  3. traffic_taffy/algorithms/comparecorrelation.py +164 -0
  4. traffic_taffy/algorithms/comparecorrelationchanges.py +210 -0
  5. traffic_taffy/algorithms/compareseries.py +117 -0
  6. traffic_taffy/algorithms/compareslices.py +116 -0
  7. traffic_taffy/algorithms/statistical.py +9 -9
  8. traffic_taffy/compare.py +149 -159
  9. traffic_taffy/comparison.py +18 -4
  10. traffic_taffy/config.py +133 -0
  11. traffic_taffy/dissection.py +78 -6
  12. traffic_taffy/dissectmany.py +26 -16
  13. traffic_taffy/dissector.py +189 -77
  14. traffic_taffy/dissector_engine/scapy.py +41 -8
  15. traffic_taffy/graph.py +54 -53
  16. traffic_taffy/graphdata.py +13 -2
  17. traffic_taffy/hooks/ip2asn.py +20 -7
  18. traffic_taffy/hooks/labels.py +45 -0
  19. traffic_taffy/hooks/psl.py +21 -3
  20. traffic_taffy/output/__init__.py +8 -48
  21. traffic_taffy/output/console.py +37 -25
  22. traffic_taffy/output/fsdb.py +24 -18
  23. traffic_taffy/reports/__init__.py +5 -0
  24. traffic_taffy/reports/compareslicesreport.py +85 -0
  25. traffic_taffy/reports/correlationchangereport.py +54 -0
  26. traffic_taffy/reports/correlationreport.py +42 -0
  27. traffic_taffy/taffy_config.py +44 -0
  28. traffic_taffy/tests/test_compare_results.py +22 -7
  29. traffic_taffy/tests/test_config.py +149 -0
  30. traffic_taffy/tests/test_global_config.py +33 -0
  31. traffic_taffy/tests/test_normalize.py +1 -0
  32. traffic_taffy/tests/test_pcap_dissector.py +12 -2
  33. traffic_taffy/tests/test_pcap_splitter.py +21 -10
  34. traffic_taffy/tools/cache_info.py +3 -2
  35. traffic_taffy/tools/compare.py +32 -24
  36. traffic_taffy/tools/config.py +83 -0
  37. traffic_taffy/tools/dissect.py +51 -59
  38. traffic_taffy/tools/explore.py +5 -4
  39. traffic_taffy/tools/export.py +28 -17
  40. traffic_taffy/tools/graph.py +25 -27
  41. {traffic_taffy-0.8.5.dist-info → traffic_taffy-0.9.dist-info}/METADATA +4 -1
  42. traffic_taffy-0.9.dist-info/RECORD +56 -0
  43. {traffic_taffy-0.8.5.dist-info → traffic_taffy-0.9.dist-info}/entry_points.txt +1 -0
  44. traffic_taffy/report.py +0 -12
  45. traffic_taffy-0.8.5.dist-info/RECORD +0 -43
  46. {traffic_taffy-0.8.5.dist-info → traffic_taffy-0.9.dist-info}/WHEEL +0 -0
  47. {traffic_taffy-0.8.5.dist-info → traffic_taffy-0.9.dist-info}/licenses/LICENSE.txt +0 -0
@@ -9,68 +9,70 @@ from traffic_taffy.dissector import (
9
9
  PCAPDissector,
10
10
  )
11
11
  from traffic_taffy.dissectmany import PCAPDissectMany
12
- from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter, Namespace
12
+ from traffic_taffy.taffy_config import TaffyConfig, TT_CFG
13
+ from rich_argparse import RichHelpFormatter
14
+ from argparse import Namespace
15
+ from argparse_with_config import ArgumentParserWithConfig
13
16
 
14
17
 
15
- def main() -> None:
16
- """Dissect a pcap file and report contents."""
18
+ def dissect_parse_args() -> Namespace:
19
+ """Parse the command line arguments."""
17
20
 
18
- def parse_args() -> Namespace:
19
- """Parse the command line arguments."""
20
- parser = ArgumentParser(
21
- formatter_class=ArgumentDefaultsHelpFormatter,
22
- description=__doc__,
23
- epilog="Example Usage: taffy-dissect -C -d 10 -n 10000 file.pcap",
24
- )
21
+ config: TaffyConfig = TaffyConfig()
22
+ config[TT_CFG.LOG_LEVEL] = "info"
25
23
 
26
- parser.add_argument(
27
- "--log-level",
28
- "--ll",
29
- default="info",
30
- help="Define the logging verbosity level (debug, info, warning, error, fotal, critical).",
31
- )
24
+ parser = ArgumentParserWithConfig(
25
+ formatter_class=RichHelpFormatter,
26
+ description=__doc__,
27
+ epilog="Example Usage: taffy-dissect -C -d 10 -n 10000 file.pcap",
28
+ default_config=config,
29
+ )
32
30
 
33
- parser.add_argument(
34
- "-f",
35
- "--fsdb",
36
- action="store_true",
37
- help="Print results in an FSDB formatted output",
38
- )
31
+ parser.add_argument(
32
+ "--log-level",
33
+ "--ll",
34
+ default="info",
35
+ config_path="log_level",
36
+ help="Define the logging verbosity level (debug, info, warning, error, fotal, critical).",
37
+ )
39
38
 
40
- parser.add_argument(
41
- "--dont-fork",
42
- action="store_true",
43
- help="Do not fork into multiple processes per file (still fork per file)",
44
- )
39
+ parser.add_argument(
40
+ "-f",
41
+ "--fsdb",
42
+ action="store_true",
43
+ help="Print results in an FSDB formatted output",
44
+ )
45
45
 
46
- dissector_add_parseargs(parser)
47
- limitor_add_parseargs(parser)
46
+ parser.add_argument(
47
+ "--dont-fork",
48
+ action="store_true",
49
+ config_path="dissect.dont_fork",
50
+ help="Do not fork into multiple processes per file (still fork per file)",
51
+ )
52
+
53
+ dissector_add_parseargs(parser, config)
54
+ limitor_add_parseargs(parser, config)
55
+
56
+ parser.add_argument("input_pcaps", type=str, help="input pcap file", nargs="*")
57
+
58
+ args = parser.parse_args()
59
+ log_level = args.log_level.upper()
60
+ logging.basicConfig(level=log_level, format="%(levelname)-10s:\t%(message)s")
48
61
 
49
- parser.add_argument("input_pcaps", type=str, help="input pcap file", nargs="*")
62
+ return (parser.config, args)
50
63
 
51
- args = parser.parse_args()
52
- log_level = args.log_level.upper()
53
- logging.basicConfig(level=log_level, format="%(levelname)-10s:\t%(message)s")
54
- return args
55
64
 
56
- args = parse_args()
65
+ def main() -> None:
66
+ """Dissect a pcap file and report contents."""
67
+
68
+ config, args = dissect_parse_args()
57
69
 
58
70
  dissector_handle_arguments(args)
59
71
 
60
72
  # load all the files
61
73
  pdm = PCAPDissectMany(
62
74
  args.input_pcaps,
63
- bin_size=args.bin_size,
64
- dissector_level=args.dissection_level,
65
- maximum_count=args.packet_count,
66
- cache_results=args.cache_pcap_results,
67
- cache_file_suffix=args.cache_file_suffix,
68
- ignore_list=args.ignore_list,
69
- pcap_filter=args.filter,
70
- layers=args.layers,
71
- force_overwrite=args.force_overwrite,
72
- force_load=args.force_load,
73
- merge_files=args.merge,
75
+ config,
74
76
  )
75
77
  try:
76
78
  dissections = pdm.load_all(return_as_list=True, dont_fork=args.dont_fork)
@@ -83,19 +85,7 @@ def main() -> None:
83
85
  dissection.merge_all(dissections)
84
86
 
85
87
  # put the dissection into a dissector for reporting
86
- pd = PCAPDissector(
87
- args.input_pcaps[0],
88
- bin_size=args.bin_size,
89
- dissector_level=args.dissection_level,
90
- maximum_count=args.packet_count,
91
- cache_results=args.cache_pcap_results,
92
- cache_file_suffix=args.cache_file_suffix,
93
- ignore_list=args.ignore_list,
94
- pcap_filter=args.filter,
95
- layers=args.layers,
96
- force_overwrite=args.force_overwrite,
97
- force_load=args.force_load,
98
- )
88
+ pd = PCAPDissector(args.input_pcaps, config)
99
89
  pd.dissection = dissection
100
90
 
101
91
  # output as requested
@@ -105,6 +95,7 @@ def main() -> None:
105
95
  match_string=args.match_string,
106
96
  match_value=args.match_value,
107
97
  minimum_count=args.minimum_count,
98
+ match_expression=args.match_expression,
108
99
  )
109
100
  else:
110
101
  pd.print(
@@ -112,6 +103,7 @@ def main() -> None:
112
103
  match_string=args.match_string,
113
104
  match_value=args.match_value,
114
105
  minimum_count=args.minimum_count,
106
+ match_expression=args.match_expression,
115
107
  )
116
108
 
117
109
 
@@ -6,7 +6,8 @@ import logging
6
6
  from logging import debug
7
7
  from datetime import datetime
8
8
  import datetime as dt
9
- from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter, Namespace
9
+ from argparse import ArgumentParser, Namespace
10
+ from rich_argparse import RichHelpFormatter
10
11
  from traffic_taffy.dissector import (
11
12
  dissector_add_parseargs,
12
13
  limitor_add_parseargs,
@@ -614,13 +615,13 @@ class TaffyExplorer(QDialog, PcapGraphData):
614
615
  def parse_args() -> Namespace:
615
616
  "Parse the command line arguments."
616
617
  parser = ArgumentParser(
617
- formatter_class=ArgumentDefaultsHelpFormatter,
618
+ formatter_class=RichHelpFormatter,
618
619
  description=__doc__,
619
620
  epilog="Example Usage: taffy-explore -C file1.pcap file2.pcap",
620
621
  )
621
622
 
622
- limitor_parser = limitor_add_parseargs(parser)
623
- compare_add_parseargs(limitor_parser, False)
623
+ limitor_add_parseargs(parser)
624
+ compare_add_parseargs(parser)
624
625
 
625
626
  dissector_add_parseargs(parser)
626
627
 
@@ -2,10 +2,12 @@
2
2
 
3
3
  import logging
4
4
  import sys
5
- from argparse import ArgumentDefaultsHelpFormatter, ArgumentParser, FileType, Namespace
5
+ from argparse import ArgumentParser, FileType, Namespace
6
+ from rich_argparse import RichHelpFormatter
6
7
 
7
8
  import pyfsdb
8
9
 
10
+ from traffic_taffy.taffy_config import TaffyConfig, TT_CFG
9
11
  from traffic_taffy.dissectmany import PCAPDissectMany
10
12
  from traffic_taffy.dissector import (
11
13
  dissector_add_parseargs,
@@ -16,12 +18,27 @@ from traffic_taffy.dissector import (
16
18
 
17
19
  def parse_args() -> Namespace:
18
20
  """Parse the command line arguments for taffy-export."""
21
+
22
+ config: TaffyConfig = TaffyConfig()
23
+ config.config_option_names = ["-y", "--config"]
24
+ config[TT_CFG.LOG_LEVEL] = "info"
25
+
26
+ config.read_configfile_from_arguments(sys.argv)
27
+
19
28
  parser = ArgumentParser(
20
- formatter_class=ArgumentDefaultsHelpFormatter,
29
+ formatter_class=RichHelpFormatter,
21
30
  description=__doc__,
22
31
  epilog="Example Usage: taffy-export -C -m IP.UDP.sport file.pcap",
23
32
  )
24
33
 
34
+ parser.add_argument(
35
+ "-y",
36
+ "--config",
37
+ default=None,
38
+ type=str,
39
+ help="Configuration file (YAML) to load.",
40
+ )
41
+
25
42
  parser.add_argument(
26
43
  "--log-level",
27
44
  "--ll",
@@ -29,8 +46,8 @@ def parse_args() -> Namespace:
29
46
  help="Define the logging verbosity level (debug, info, warning, error, fotal, critical).",
30
47
  )
31
48
 
32
- dissector_add_parseargs(parser)
33
- limitor_add_parseargs(parser)
49
+ dissector_add_parseargs(parser, config)
50
+ limitor_add_parseargs(parser, config)
34
51
 
35
52
  parser.add_argument(
36
53
  "-o",
@@ -45,28 +62,22 @@ def parse_args() -> Namespace:
45
62
  args = parser.parse_args()
46
63
  log_level = args.log_level.upper()
47
64
  logging.basicConfig(level=log_level, format="%(levelname)-10s:\t%(message)s")
48
- return args
65
+
66
+ config.load_namespace(args)
67
+ return config
49
68
 
50
69
 
51
70
  def main() -> None:
52
71
  """Export traffic-taffy data into an FSDB file."""
53
- args = parse_args()
72
+ config = parse_args()
73
+ args = config.as_namespace()
54
74
 
55
75
  dissector_handle_arguments(args)
56
76
 
77
+ del config["output_file"] # this causes a msgpack problem
57
78
  pdm = PCAPDissectMany(
58
79
  args.input_pcaps,
59
- bin_size=args.bin_size,
60
- dissector_level=args.dissection_level,
61
- maximum_count=args.packet_count,
62
- cache_results=args.cache_pcap_results,
63
- cache_file_suffix=args.cache_file_suffix,
64
- ignore_list=args.ignore_list,
65
- pcap_filter=args.filter,
66
- layers=args.layers,
67
- force_load=args.force_load,
68
- force_overwrite=args.force_overwrite,
69
- merge_files=args.merge,
80
+ config,
70
81
  )
71
82
 
72
83
  dissections = pdm.load_all(return_as_list=True)
@@ -1,27 +1,36 @@
1
1
  """Read a PCAP file and graph it or parts of it."""
2
2
 
3
- from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter, Namespace
3
+ import logging
4
+ from argparse import Namespace
5
+ from argparse_with_config import ArgumentParserWithConfig
6
+ from rich_argparse import RichHelpFormatter
7
+
4
8
  from traffic_taffy.graph import PcapGraph
9
+ from traffic_taffy.taffy_config import TaffyConfig
5
10
  from traffic_taffy.dissector import (
6
11
  dissector_add_parseargs,
7
12
  limitor_add_parseargs,
8
13
  dissector_handle_arguments,
9
14
  )
10
- import logging
11
15
 
12
16
 
13
17
  def parse_args() -> Namespace:
14
18
  """Parse the command line arguments."""
15
- parser = ArgumentParser(
16
- formatter_class=ArgumentDefaultsHelpFormatter,
19
+
20
+ config: TaffyConfig = TaffyConfig()
21
+
22
+ parser = ArgumentParserWithConfig(
23
+ formatter_class=RichHelpFormatter,
17
24
  description=__doc__,
18
- epilog="Example Usage: taffy-graph -C -m TOTAL -M packet -o graph.png file.pcap",
25
+ epilog="Example Usage: taffy-graph -C -m __TOTAL__ -M packet -o graph.png file.pcap",
26
+ default_config=config,
19
27
  )
20
28
 
21
29
  parser.add_argument(
22
30
  "-o",
23
31
  "--output-file",
24
32
  default=None,
33
+ config_path="graph.output_file",
25
34
  type=str,
26
35
  help="Where to save the output (png)",
27
36
  )
@@ -29,6 +38,7 @@ def parse_args() -> Namespace:
29
38
  parser.add_argument(
30
39
  "-p",
31
40
  "--by-percentage",
41
+ config_path="graph.by_percentage",
32
42
  action="store_true",
33
43
  help="Graph by percentage of traffic rather than by value",
34
44
  )
@@ -36,6 +46,7 @@ def parse_args() -> Namespace:
36
46
  parser.add_argument(
37
47
  "-i",
38
48
  "--interactive",
49
+ config_path="graph.interactive",
39
50
  action="store_true",
40
51
  help="Prompt repeatedly for graph data to create",
41
52
  )
@@ -44,11 +55,12 @@ def parse_args() -> Namespace:
44
55
  "--log-level",
45
56
  "--ll",
46
57
  default="info",
58
+ config_path="log_level",
47
59
  help="Define verbosity level (debug, info, warning, error, fotal, critical).",
48
60
  )
49
61
 
50
- dissector_add_parseargs(parser)
51
- limitor_add_parseargs(parser)
62
+ dissector_add_parseargs(parser, config)
63
+ limitor_add_parseargs(parser, config)
52
64
 
53
65
  parser.add_argument("input_pcaps", type=str, help="PCAP file to graph", nargs="+")
54
66
 
@@ -56,34 +68,20 @@ def parse_args() -> Namespace:
56
68
  log_level = args.log_level.upper()
57
69
  logging.basicConfig(level=log_level, format="%(levelname)-10s:\t%(message)s")
58
70
  logging.getLogger("matplotlib.font_manager").setLevel(logging.ERROR)
59
- return args
71
+
72
+ dissector_handle_arguments(args)
73
+
74
+ return parser.config, args
60
75
 
61
76
 
62
77
  def main() -> None:
63
78
  """Run taffy-graph."""
64
- args = parse_args()
65
-
66
- dissector_handle_arguments(args)
79
+ config, args = parse_args()
67
80
 
68
81
  pc = PcapGraph(
69
82
  args.input_pcaps,
70
83
  args.output_file,
71
- maximum_count=args.packet_count,
72
- minimum_count=args.minimum_count,
73
- bin_size=args.bin_size,
74
- match_string=args.match_string,
75
- match_value=args.match_value,
76
- cache_pcap_results=args.cache_pcap_results,
77
- dissector_level=args.dissection_level,
78
- interactive=args.interactive,
79
- by_percentage=args.by_percentage,
80
- ignore_list=args.ignore_list,
81
- pcap_filter=args.filter,
82
- cache_file_suffix=args.cache_file_suffix,
83
- layers=args.layers,
84
- force_overwrite=args.force_overwrite,
85
- force_load=args.force_load,
86
- merge_files=args.merge,
84
+ config,
87
85
  )
88
86
  pc.graph_it()
89
87
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: traffic-taffy
3
- Version: 0.8.5
3
+ Version: 0.9
4
4
  Summary: A tool for doing differential analysis of pcap files
5
5
  Project-URL: Homepage, https://traffic-taffy.github.io/
6
6
  Author-email: Wes Hardaker <opensource@hardakers.net>
@@ -8,8 +8,10 @@ License-File: LICENSE.txt
8
8
  Classifier: Operating System :: OS Independent
9
9
  Classifier: Programming Language :: Python :: 3
10
10
  Requires-Python: >=3.7
11
+ Requires-Dist: argparse-with-config>=1.1.4
11
12
  Requires-Dist: cryptography
12
13
  Requires-Dist: dnssplitter
14
+ Requires-Dist: dotnest>=1.0
13
15
  Requires-Dist: dpkt
14
16
  Requires-Dist: ip2asn
15
17
  Requires-Dist: msgpack
@@ -19,6 +21,7 @@ Requires-Dist: pyfsdb
19
21
  Requires-Dist: pyopenssl==22.1.0
20
22
  Requires-Dist: pyqt6-charts
21
23
  Requires-Dist: rich
24
+ Requires-Dist: rich-argparse
22
25
  Requires-Dist: scapy
23
26
  Requires-Dist: seaborn
24
27
  Description-Content-Type: text/markdown
@@ -0,0 +1,56 @@
1
+ traffic_taffy/__init__.py,sha256=sV0YPhDhX1eyI3T7uvN30U4acet2QEwPqIOXw_KoUPc,20
2
+ traffic_taffy/compare.py,sha256=g9rU6oa_2Wy0nUJ7K6TI8JTctyGCRvYEUakDBf7blOY,8644
3
+ traffic_taffy/comparison.py,sha256=KJxOp4UqhfRkF4LI1PMDRIefeyTm2w5sbdr7VUTS4KM,1451
4
+ traffic_taffy/config.py,sha256=DgTu2kA1Ec4Hbwl_44kTsdyJYvxAabgJk9a7aOH2XXU,4444
5
+ traffic_taffy/dissection.py,sha256=dW6UxJ_RY5oMipyh3J2CvsjP-E9Llly7IgjbPFSSTzU,24571
6
+ traffic_taffy/dissectmany.py,sha256=SWFXFyERNCi0j7hiMDEeJJdPYDpa0SOlSj1V8AqpXUA,5189
7
+ traffic_taffy/dissector.py,sha256=Q5dYLY8ZVPt2Iz4T0asdmBBwma2YPBk9XOwtmOATX10,15626
8
+ traffic_taffy/graph.py,sha256=EfkxH5D9PNlDpvftkh9GyUusV05EV537QGB7JOMeW4w,4730
9
+ traffic_taffy/graphdata.py,sha256=r_QNXO3FzC7Vx4123SdCliAh7j2NCQ4Lb5uoOJnlt2M,3376
10
+ traffic_taffy/taffy_config.py,sha256=AmdQbWAhoiV7aTNSpV1exJfd5eA0a3sYTIjikHkMPwY,1124
11
+ traffic_taffy/algorithms/__init__.py,sha256=A7xI2ctotBT7WgG-6ItilXE_FIWF9QWc6UjdfGyThKw,737
12
+ traffic_taffy/algorithms/comparecorrelation.py,sha256=gakZJotZNOVj96y4_-vtt_ka8pZLBVERf44Yixtq_yE,5875
13
+ traffic_taffy/algorithms/comparecorrelationchanges.py,sha256=-ztWKpNN5lm_6e7hTSZytwzuK1RpMpfe1ksQgsb0_tk,7646
14
+ traffic_taffy/algorithms/compareseries.py,sha256=cVonTV6TnMZAaHlGqZ6shn0aDQTTHzK-tPvUAk3OkuQ,4165
15
+ traffic_taffy/algorithms/compareslices.py,sha256=aIDhISKi-m8uD65pBd3A2naoxYD9zeay6y7mAk4hXdg,4336
16
+ traffic_taffy/algorithms/statistical.py,sha256=McP8fdg4P2zRHm57Gq7xKLukrvh7ITZNlj4lhv51IPE,4158
17
+ traffic_taffy/dissector_engine/__init__.py,sha256=Hu-UQtz7yhivmQLUP5b8tFQLEhy2bfvrRV3Q4aZp6vg,2202
18
+ traffic_taffy/dissector_engine/dnstap.py,sha256=rBzVlB0D3YVhHOsr17cbnCIZU13g20srgR4sE7ZfNUE,4810
19
+ traffic_taffy/dissector_engine/dpkt.py,sha256=YgFceo_6cy1VN-ODIijSsOfH3w8OzHPbpUS463is3YI,10949
20
+ traffic_taffy/dissector_engine/scapy.py,sha256=WrZUfV_viR2Tro0kM3QKUkufIcM3RyYaZ3ncA1yZsaU,4897
21
+ traffic_taffy/hooks/__init__.py,sha256=Bvhl6RnyBqQkWuCU6TS0O_ZHe4qCQsC4HE8FELigWPw,661
22
+ traffic_taffy/hooks/ip2asn.py,sha256=FCjTbHQZEuOvlw1fMyQgcJFiZrJfpNpUVZTdsxtUldw,2132
23
+ traffic_taffy/hooks/labels.py,sha256=QayehHzvaqILf_bP3avwGXa-xL4IBEndo6ILbLtqcKU,1860
24
+ traffic_taffy/hooks/psl.py,sha256=ym1vzBS9esgIRxZi5hWFcUl0vax5go_f9-2P_6kynts,2031
25
+ traffic_taffy/iana/tables.msgpak,sha256=d-R5Xw9yG9t4RqGJRrpE6cjH4YfaxQBwQiBhNjKZbwI,172825
26
+ traffic_taffy/output/__init__.py,sha256=qqlAUA99fxWlHEns-ji7A2RrcA8RA-AKXK7n2D737c8,3312
27
+ traffic_taffy/output/console.py,sha256=QizlMIRbUKm7S57SojBiTAOB4KM9DCcj8EKiH1roO6U,3031
28
+ traffic_taffy/output/fsdb.py,sha256=0z2zDydfnqOVM8Mj6pTJf4n4pGPupWykuYPgdgjJRN8,1859
29
+ traffic_taffy/output/memory.py,sha256=86tgJ-jMt3UVX31eP6U02YbbYRoqbYhhR4kXJQmYzO4,1870
30
+ traffic_taffy/reports/__init__.py,sha256=lMDS7q35aIdDrJ7G8ot4Q_6t9nYllr0C9510FL43rZY,113
31
+ traffic_taffy/reports/compareslicesreport.py,sha256=Clrif58TPBTwP4BNxh9PcHkyASbUUscrOWtSgLrItN4,2754
32
+ traffic_taffy/reports/correlationchangereport.py,sha256=W8tKWMk5Ss45Ho3wh_mAcK2Jj2fpL7vnNyun2C_lRgw,1575
33
+ traffic_taffy/reports/correlationreport.py,sha256=9PdL_53mxfO619PFSoeRsTEm63L1J_u-B4sVvlH8xaU,1109
34
+ traffic_taffy/tests/test_compare_results.py,sha256=iLcS9wvEqxgKszIspLtD2Zw8Qk5JxOCurQwWYzhtOkM,2318
35
+ traffic_taffy/tests/test_config.py,sha256=UCqSJXVwpFFchcIbyFzLqjVF-wgEV755KlQ7thommro,4284
36
+ traffic_taffy/tests/test_dict_merge.py,sha256=t3rZSQQ0AlBxRKfLborx9SxYN53cCAQQzZ2w-__WT2Y,1429
37
+ traffic_taffy/tests/test_global_config.py,sha256=kjr1wy1cXWagVLb0OnQYH0vz2htxLs944Xo42lNsir4,597
38
+ traffic_taffy/tests/test_hooks.py,sha256=amjEbtMwOZZCg_RCJ0wQR7aOqNfwz3IG3WY-9CwjSF4,1260
39
+ traffic_taffy/tests/test_normalize.py,sha256=sKHyiV8YXcKKcWqsbZP94nu_g5oEMJzzj6umeHxwa64,2638
40
+ traffic_taffy/tests/test_pcap_dissector.py,sha256=U2P1ECerNbT6d_KP_uSVWyzfA-PfYTZUHWncQ-jK0t4,2214
41
+ traffic_taffy/tests/test_pcap_splitter.py,sha256=F1s4KQi340oCRcfdkU_r1wYRExCEnTs7FxYbCYTQrbY,2812
42
+ traffic_taffy/tests/test_splitter.py,sha256=bSb84QOCxRuRXy4BGLFDs5YYRBDgZrx9InhtE3DZsFg,1481
43
+ traffic_taffy/tests/test_value_printing.py,sha256=rhmCUqnh1Lk1TTZvZi7ksvUWm4XDB4g2aUihjLpoqHI,266
44
+ traffic_taffy/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
+ traffic_taffy/tools/cache_info.py,sha256=ZanO6jDlTdfJ7w0N_7BkLyJj4NyZGShaH7SrUulbIoE,2085
46
+ traffic_taffy/tools/compare.py,sha256=oT5fIqfPeY6nGI9vSVAoKDsAVzzqfXJDzyOw2BhPfSI,3509
47
+ traffic_taffy/tools/config.py,sha256=XVsKA0E429K2HCyjuPuHwS1iPBkscQxa82Zu53Wmpqw,2458
48
+ traffic_taffy/tools/dissect.py,sha256=B-7e7aqEOWtJ-0P2Y-mzmrzoDqVrDCJ2JzGR45QtuuQ,3073
49
+ traffic_taffy/tools/explore.py,sha256=gUcOfAgangJJI1si1gLPUoWRUKmWUAXSP0oTD2JJygw,24149
50
+ traffic_taffy/tools/export.py,sha256=9zBBGhZK95b4ZiLJ8XK30GPsaBjgR84Sk1HoPIxRpTI,2844
51
+ traffic_taffy/tools/graph.py,sha256=KiKDY9R8JLT5-JouANoi_1WGcdFMhXsLnYlhPsFRWpM,2316
52
+ traffic_taffy-0.9.dist-info/METADATA,sha256=NnTRNvAd6UZ61pOGW5_CN3KpUFyk9VhR1qWxmW3wEQw,2031
53
+ traffic_taffy-0.9.dist-info/WHEEL,sha256=TJPnKdtrSue7xZ_AVGkp9YXcvDrobsjBds1du3Nx6dc,87
54
+ traffic_taffy-0.9.dist-info/entry_points.txt,sha256=F0lqjvw94nQ3hY4eerN7faT9aKhhGUHbqBhuEr9q1r8,361
55
+ traffic_taffy-0.9.dist-info/licenses/LICENSE.txt,sha256=hiV1DJgDQeSM1r7P-ez5oxily11S5nsCedU0jKzKKzo,11338
56
+ traffic_taffy-0.9.dist-info/RECORD,,
@@ -1,6 +1,7 @@
1
1
  [console_scripts]
2
2
  taffy-cache-info = traffic_taffy.tools.cache_info:main
3
3
  taffy-compare = traffic_taffy.tools.compare:main
4
+ taffy-config = traffic_taffy.tools.config:main
4
5
  taffy-dissect = traffic_taffy.tools.dissect:main
5
6
  taffy-explorer = traffic_taffy.tools.explorer:main
6
7
  taffy-export = traffic_taffy.tools.export:main
traffic_taffy/report.py DELETED
@@ -1,12 +0,0 @@
1
- from dataclasses import dataclass
2
-
3
-
4
- @dataclass
5
- class Report:
6
- delta_percentage: float
7
- delta_absolute: int
8
- total: int
9
- left_count: int
10
- right_count: int
11
- left_percentage: float
12
- right_percentage: float
@@ -1,43 +0,0 @@
1
- traffic_taffy/__init__.py,sha256=n9FymgbxpXu3w9gvFFmFbdtHDu-QOLvIWAMihAIPlcs,22
2
- traffic_taffy/compare.py,sha256=4T25Ygp6rQw7J3syn4Tam6tEw3ieSzl-lELPARvNnVw,8641
3
- traffic_taffy/comparison.py,sha256=MmCxK7E3RbVLS8gJ_JJOdqa2MHQ7np1Pq_VB0Scir8U,933
4
- traffic_taffy/dissection.py,sha256=6Ex0zkUCvl-nMNg44CYkSL7JFqi6O7_T690bFzTj0A8,21567
5
- traffic_taffy/dissectmany.py,sha256=kJO2XF8QzOmLDsKDjZIkQBmxC97wFpi-IisCURLOmfU,4700
6
- traffic_taffy/dissector.py,sha256=JHewf3vhvYjE6CGuRzO6_SnR5QuHZjzx-hZjpkAPHl4,11685
7
- traffic_taffy/graph.py,sha256=lH20RjnY3rMU8g2zyOkpS5pfvgCcYa4GCtO22uArzs8,4510
8
- traffic_taffy/graphdata.py,sha256=lHpLuzzypEPuz3QPfkvs0IAbplTLzKcqHaLyoRidmiE,2971
9
- traffic_taffy/report.py,sha256=Yzb27hUWcWL-RxWpSQmRyM8NyWxQGT0l0jUCGHoYDSY,224
10
- traffic_taffy/algorithms/__init__.py,sha256=wfzoujmw_Huwi69UnDgAcBQyXeKqz2tPW4RFSqTr3iU,318
11
- traffic_taffy/algorithms/statistical.py,sha256=J9eI2a4S3GXezWySjjXZQ_sxNEnSc6ePiDSL3cp-UjQ,4023
12
- traffic_taffy/dissector_engine/__init__.py,sha256=Hu-UQtz7yhivmQLUP5b8tFQLEhy2bfvrRV3Q4aZp6vg,2202
13
- traffic_taffy/dissector_engine/dnstap.py,sha256=rBzVlB0D3YVhHOsr17cbnCIZU13g20srgR4sE7ZfNUE,4810
14
- traffic_taffy/dissector_engine/dpkt.py,sha256=YgFceo_6cy1VN-ODIijSsOfH3w8OzHPbpUS463is3YI,10949
15
- traffic_taffy/dissector_engine/scapy.py,sha256=5lE6y4wzULfULTFcTAo6qINazqoBVwzbRzP0alP4ATc,3730
16
- traffic_taffy/hooks/__init__.py,sha256=Bvhl6RnyBqQkWuCU6TS0O_ZHe4qCQsC4HE8FELigWPw,661
17
- traffic_taffy/hooks/ip2asn.py,sha256=8KyqwKTY3YK9GZEDW_3PM_6zuvrzkDAzIceIodNAepY,1765
18
- traffic_taffy/hooks/psl.py,sha256=6Xmbl2OigDIe17ChumU35iuE0B6Q7ttBp2iBruxWFg4,1529
19
- traffic_taffy/iana/tables.msgpak,sha256=d-R5Xw9yG9t4RqGJRrpE6cjH4YfaxQBwQiBhNjKZbwI,172825
20
- traffic_taffy/output/__init__.py,sha256=dSpW9xDno3nKaYOwThS2fVkcIHJVAJE9DlEiLfdHXfg,4555
21
- traffic_taffy/output/console.py,sha256=Ziq4MKtzSdP9oVaZrWHiw0Bpsm2Dj9QFLJtDK38mxaY,2911
22
- traffic_taffy/output/fsdb.py,sha256=po--ldHeRPTXVTkP68qtI_BYV2cEOab-kFVWv0ymj5M,1704
23
- traffic_taffy/output/memory.py,sha256=86tgJ-jMt3UVX31eP6U02YbbYRoqbYhhR4kXJQmYzO4,1870
24
- traffic_taffy/tests/test_compare_results.py,sha256=LRAAsel2vwSLZmSGxzdGurga77dhBsLkTCMRjybb10A,1921
25
- traffic_taffy/tests/test_dict_merge.py,sha256=t3rZSQQ0AlBxRKfLborx9SxYN53cCAQQzZ2w-__WT2Y,1429
26
- traffic_taffy/tests/test_hooks.py,sha256=amjEbtMwOZZCg_RCJ0wQR7aOqNfwz3IG3WY-9CwjSF4,1260
27
- traffic_taffy/tests/test_normalize.py,sha256=k5y3XmYitnF1aTkB-9dZ7WZPQB__l_iEzC6atKKywfw,2601
28
- traffic_taffy/tests/test_pcap_dissector.py,sha256=sxJJ3seO9pjzilM0b6iu_ggQbUI4E7WbMFdwm4m9Gz0,2027
29
- traffic_taffy/tests/test_pcap_splitter.py,sha256=Pjv2CS_WXqK1wQ1rdsxLU-M1Z5fuHsciEhiDJpujFnI,2568
30
- traffic_taffy/tests/test_splitter.py,sha256=bSb84QOCxRuRXy4BGLFDs5YYRBDgZrx9InhtE3DZsFg,1481
31
- traffic_taffy/tests/test_value_printing.py,sha256=rhmCUqnh1Lk1TTZvZi7ksvUWm4XDB4g2aUihjLpoqHI,266
32
- traffic_taffy/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
- traffic_taffy/tools/cache_info.py,sha256=N4L-xjO3i-p3QD5DIytSt3GBnT4JsJh3V2dl5Tktumk,2084
34
- traffic_taffy/tools/compare.py,sha256=BkcWza0lN6KeBb_8oyr88eh0WoVqp5LM3yK8nRY16bc,3476
35
- traffic_taffy/tools/dissect.py,sha256=Z_5JJ92E4168_GZM_9Iu-m6lDfETBt8Gv-vD_Mu3Cfg,3559
36
- traffic_taffy/tools/explore.py,sha256=Hb4x9HZkFoYnR8BJKF5OLwZWKGR3RX3MdZhX4Oo-NDU,24180
37
- traffic_taffy/tools/export.py,sha256=BuAnZcOszj9ZpMxHmRjDqptR15dMRigOhp2-BFJHgWA,2707
38
- traffic_taffy/tools/graph.py,sha256=gARv5-7N5MUBSJJ8Uj5XLx4xEonXgIMADKwN573jxyk,2555
39
- traffic_taffy-0.8.5.dist-info/METADATA,sha256=h_i-wO4muRSfeswpfjQddlpyinLnYJfYc2wLGnr_SN4,1933
40
- traffic_taffy-0.8.5.dist-info/WHEEL,sha256=TJPnKdtrSue7xZ_AVGkp9YXcvDrobsjBds1du3Nx6dc,87
41
- traffic_taffy-0.8.5.dist-info/entry_points.txt,sha256=ySz30b1Cu03CtCGMRqqg0NZJpzrVI91T5HjbEaTNnpQ,314
42
- traffic_taffy-0.8.5.dist-info/licenses/LICENSE.txt,sha256=hiV1DJgDQeSM1r7P-ez5oxily11S5nsCedU0jKzKKzo,11338
43
- traffic_taffy-0.8.5.dist-info/RECORD,,