#
tokens: 1459/50000 3/3 files
lines: off (toggle) GitHub
raw markdown copy
# Directory Structure

```
├── bridge.py
├── capture_packet.lua
├── claude_desktop_config.json
├── diagram.png
├── LICENSE
├── README.md
└── Wireshark_MCP-demo.mp4
```

# Files

--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------

```markdown
# Wireshark-MCP Integration Toolkit
<h1 align="center">
  <a href="https://github.com/shubham-s-pandey/WiresharkMCP"><img src="https://github.com/shubham-s-pandey/WiresharkMCP/blob/main/diagram.png" alt="logo" border="0"></a>
</h1>

## Wireshark MCP Demo Video

You can view the demo video for Wireshark MCP here:

[Wireshark MCP Demo Video](https://github.com/shubham-s-pandey/WiresharkMCP/blob/main/Wireshark_MCP-demo.mp4)

## Overview
A powerful integration between Wireshark and MCP (Machine Control Protocol) that enables natural language interaction with network analysis through Claude Desktop.

![Wireshark Integration](https://img.shields.io/badge/Wireshark-Integration-blue)
![MCP Protocol](https://img.shields.io/badge/MCP-Enabled-green)
![Python Lua](https://img.shields.io/badge/Python%20%7C%20Lua-Compatible-orange)

## Components

### Python MCP Server
- Manages communication bridge between Wireshark and Claude
- Provides CLI interface for packet analysis
- Implements smart buffering and file management
- Network interface discovery system

### Lua Wireshark Extension
- Real-time packet dissection and analysis
- Custom protocol field definitions
- Automated interface listing
- Buffered packet logging system

## Bugs and Feature Requests
Please raise an issue if you encounter a bug or have a feature request. 

## Contributing
If you want to contribute to a project and make it better, your help is very welcome.

```

--------------------------------------------------------------------------------
/claude_desktop_config.json:
--------------------------------------------------------------------------------

```json
{
  "mcpServers": {
    "wireshark_packet_analyzer": {
      "command": "python3",
      "args": [
        "C:\\Users\\Wireshark\\Desktop\\bridge.py"
      ]
    }
  }
}

```

--------------------------------------------------------------------------------
/bridge.py:
--------------------------------------------------------------------------------

```python
import logging
import os
import json
import time
from mcp.server.fastmcp import FastMCP

logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)

CONFIG = {
    'PACKET_FILE': r'C:\Users\Wireshark\Downloads\mcp_packet_details.txt',
    'INTERFACES_FILE': r'C:\Users\Wireshark\Downloads\network_interfaces.txt',
    'MAX_DISPLAY_PACKETS': 100,
}

mcp = FastMCP("wireshark_packet_analyzer")

def read_packet_summaries(num_packets=CONFIG['MAX_DISPLAY_PACKETS']):
    """
    Read recent packet summaries from the file
    """
    try:
        if not os.path.exists(CONFIG['PACKET_FILE']):
            return "No packet capture file found. Start capturing packets in Wireshark."
        
        file_stats = os.stat(CONFIG['PACKET_FILE'])
        
        if file_stats.st_size == 0:
            return "Packet capture file is empty. Start capturing packets in Wireshark."
        
        if time.time() - file_stats.st_mtime > 3600:
            return "Packet capture file is outdated. Start a new capture in Wireshark."
        
        with open(CONFIG['PACKET_FILE'], 'r') as file:
            lines = file.readlines()
            start_index = max(0, len(lines) - num_packets)
            return ''.join(lines[start_index:]) if lines else "No packets captured yet."
    
    except Exception as e:
        logger.error(f"Error reading packet file: {e}")
        return f"Error reading packet file: {e}"

def get_network_interfaces():
    """
    Retrieve available network interfaces
    """
    try:
        if os.path.exists(CONFIG['INTERFACES_FILE']):
            with open(CONFIG['INTERFACES_FILE'], 'r') as f:
                interfaces = f.read().strip().split('\n')
                return '\n'.join(interfaces)
        
        import subprocess
        
        result = subprocess.run(['wmic', 'nic', 'get', 'Name,NetConnectionStatus'], 
                                capture_output=True, 
                                text=True, 
                                shell=True)
        
        interfaces = []
        for line in result.stdout.split('\n')[1:]:
            if line.strip():
                interfaces.append(line.strip())
        
        return '\n'.join(interfaces)
    
    except Exception as e:
        logger.error(f"Error retrieving network interfaces: {e}")
        return f"Error retrieving network interfaces: {e}"

def get_interface_details(interface_name):
    """
    Get detailed information about a specific interface
    """
    try:
        import subprocess
        
        result = subprocess.run(
            ['wmic', 'nic', 'where', f'Name="{interface_name}"', 'get', '*'], 
            capture_output=True, 
            text=True, 
            shell=True
        )
        
        if result.returncode == 0 and result.stdout.strip():
            return result.stdout.strip()
        else:
            return f"No details found for interface: {interface_name}"
    
    except Exception as e:
        logger.error(f"Error retrieving interface details: {e}")
        return f"Error retrieving interface details: {e}"

@mcp.tool()
async def list_interfaces() -> str:
    """
    MCP tool to list network interfaces
    """
    logger.debug("Listing network interfaces")
    return get_network_interfaces()

@mcp.tool()
async def get_packet_summary() -> str:
    """
    MCP tool to retrieve packet summaries
    """
    logger.debug("Retrieving packet summaries")
    return read_packet_summaries()

@mcp.tool()
async def clear_packet_file() -> str:
    """
    MCP tool to clear the packet capture file
    """
    try:
        if os.path.exists(CONFIG['PACKET_FILE']):
            os.remove(CONFIG['PACKET_FILE'])
        return "Packet capture file cleared successfully."
    except Exception as e:
        logger.error(f"Error clearing packet file: {e}")
        return f"Error clearing packet file: {e}"

@mcp.tool()
async def get_interface_details_tool(interface_name: str) -> str:
    """
    MCP tool to get detailed information about a specific interface
    """
    logger.debug(f"Retrieving details for interface: {interface_name}")
    return get_interface_details(interface_name)

# Main execution
if __name__ == "__main__":
    try:
        logger.info("Starting MCP server for Wireshark packet analysis")
        mcp.run(transport='stdio')
    except Exception as e:
        logger.error(f"MCP server error: {e}")
```