Skip to main content
Glama

Wireshark MCP

ip_protection_example.py6.45 kB
#!/usr/bin/env python3 """ IP Protection Example for Wireshark MCP This example demonstrates how to use the IP address protection features of Wireshark MCP to anonymize, pseudonymize, or redact sensitive IP addresses while preserving meaningful analysis capabilities. Usage: python ip_protection_example.py path/to/capture.pcap """ import sys import os import argparse import json from datetime import datetime # Add the parent directory to the module search path sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) # Import Wireshark MCP components from wireshark_mcp import WiresharkMCP, IPProtectionManager from wireshark_mcp.formatters import ClaudeFormatter def demonstrate_ip_protection_modes(pcap_path: str, output_dir: str = None): """ Demonstrate different IP protection modes on a packet capture. Args: pcap_path: Path to the PCAP file to analyze output_dir: Directory to write output files (defaults to current directory) """ if not os.path.exists(pcap_path): print(f"Error: PCAP file not found: {pcap_path}") return if not output_dir: output_dir = os.getcwd() os.makedirs(output_dir, exist_ok=True) print(f"Analyzing PCAP file: {pcap_path}") print(f"Output will be saved to: {output_dir}") # Initialize Wireshark MCP try: mcp = WiresharkMCP(pcap_path) except Exception as e: print(f"Error initializing Wireshark MCP: {e}") return # Extract base context print("Extracting packet data...") context = mcp.generate_context(max_packets=100) # Store original packet data for comparison original_packets = context["packets"][:5] # Just keep a few for the example # Create formatter for Claude formatter = ClaudeFormatter() # Create IP protectors with different modes protection_modes = { "redact_full": IPProtectionManager(IPProtectionManager.REDACT_FULL), "redact_host": IPProtectionManager(IPProtectionManager.REDACT_HOST), "pseudonymize": IPProtectionManager(IPProtectionManager.PSEUDONYMIZE), "partial_mask": IPProtectionManager(IPProtectionManager.PARTIAL_MASK) } # Process with each protection mode results = {} print("\nApplying different IP protection modes...") for mode_name, protector in protection_modes.items(): print(f" - Processing with {mode_name} mode") # Apply protection to sample packets protected_packets = [] for packet in original_packets: if 'ip' in packet: protected_packet = protector.protect_packet(packet) protected_packets.append(protected_packet) # Store results results[mode_name] = protected_packets # If using pseudonymization, show the mapping if mode_name == "pseudonymize": mapping = protector.get_ip_mapping() results["ip_mapping"] = mapping # Save results to file timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") output_file = os.path.join(output_dir, f"ip_protection_comparison_{timestamp}.json") with open(output_file, 'w') as f: json.dump(results, f, indent=2) print(f"\nResults saved to: {output_file}") # Create example with additional protected ranges print("\nDemonstrating protected IP ranges...") range_protector = IPProtectionManager(IPProtectionManager.PSEUDONYMIZE) # Add specific ranges to protect range_protector.add_protected_range("192.168.0.0/16") # Private networks range_protector.add_protected_range("10.0.0.0/8") # More private networks range_protector.add_protected_range("172.16.0.0/12") # More private networks range_protector.add_protected_range("203.0.113.0/24") # TEST-NET-3 (example addresses) # Apply to original packets range_protected_packets = [] for packet in original_packets: if 'ip' in packet: protected_packet = range_protector.protect_packet(packet) range_protected_packets.append(protected_packet) # Save results range_results = { "original_packets": original_packets, "range_protected_packets": range_protected_packets, "protected_ranges": [ "192.168.0.0/16", "10.0.0.0/8", "172.16.0.0/12", "203.0.113.0/24" ], "ip_mapping": range_protector.get_ip_mapping() } range_output_file = os.path.join(output_dir, f"ip_protection_ranges_{timestamp}.json") with open(range_output_file, 'w') as f: json.dump(range_results, f, indent=2) print(f"Results with protected ranges saved to: {range_output_file}") # Create formatted output for Claude print("\nCreating Claude-ready markdown with protected packet data...") # Apply pseudonymization to full context full_protector = IPProtectionManager(IPProtectionManager.PSEUDONYMIZE) protected_context = context.copy() protected_context["packets"] = [] for packet in context["packets"]: if 'ip' in packet: protected_packet = full_protector.protect_packet(packet) protected_context["packets"].append(protected_packet) else: protected_context["packets"].append(packet) # Format for Claude claude_prompt = formatter.format_context( protected_context, query="Analyze this network traffic. Note that IP addresses have been pseudonymized for privacy." ) # Save Claude prompt claude_output_file = os.path.join(output_dir, f"protected_claude_prompt_{timestamp}.md") with open(claude_output_file, 'w') as f: f.write(claude_prompt) print(f"Claude-ready markdown saved to: {claude_output_file}") print("\nIP protection demo complete!") def main(): # Set up command line argument parsing parser = argparse.ArgumentParser(description="Demonstrate IP protection features of Wireshark MCP") parser.add_argument("pcap_file", help="Path to the PCAP file to analyze") parser.add_argument("-o", "--output-dir", help="Directory to write output files") args = parser.parse_args() # Run the demonstration demonstrate_ip_protection_modes(args.pcap_file, args.output_dir) if __name__ == "__main__": main()

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/sarthaksiddha/Wireshark-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server