{"id":13587052,"url":"https://github.com/emmanueltouzery/hotwire","last_synced_at":"2025-08-20T08:31:35.236Z","repository":{"id":49522333,"uuid":"345810257","full_name":"emmanueltouzery/hotwire","owner":"emmanueltouzery","description":"Hotwire allows you to study network traffic of a few popular protocols in a simple way","archived":false,"fork":false,"pushed_at":"2022-03-09T20:48:56.000Z","size":2242,"stargazers_count":230,"open_issues_count":3,"forks_count":12,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-04-07T12:21:46.809Z","etag":null,"topics":["packet-capture","pcap","tcpdump","tshark","wireshark"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/emmanueltouzery.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-03-08T22:14:36.000Z","updated_at":"2025-03-19T08:11:44.000Z","dependencies_parsed_at":"2022-09-02T02:02:07.697Z","dependency_job_id":null,"html_url":"https://github.com/emmanueltouzery/hotwire","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/emmanueltouzery/hotwire","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emmanueltouzery%2Fhotwire","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emmanueltouzery%2Fhotwire/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emmanueltouzery%2Fhotwire/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emmanueltouzery%2Fhotwire/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/emmanueltouzery","download_url":"https://codeload.github.com/emmanueltouzery/hotwire/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emmanueltouzery%2Fhotwire/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271287618,"owners_count":24733423,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-20T02:00:09.606Z","response_time":69,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["packet-capture","pcap","tcpdump","tshark","wireshark"],"created_at":"2024-08-01T15:05:59.470Z","updated_at":"2025-08-20T08:31:34.886Z","avatar_url":"https://github.com/emmanueltouzery.png","language":"Rust","funding_links":[],"categories":["Rust","Internet and Networking"],"sub_categories":["Network Monitoring"],"readme":"# Hotwire\n\n\u003ca href='https://flathub.org/apps/details/com.github.emmanueltouzery.hotwire'\u003e\u003cimg width='180' align='right' alt='Download on Flathub' src='https://flathub.org/assets/badges/flathub-badge-en.png'/\u003e\u003c/a\u003e\n\nHotwire is a gtk GUI application that leverages the wireshark and tshark infrastructure to capture traffic and explore the contents\nof tcpdump files, but displays the data in a more focused way than wireshark. Hotwire supports only a\nfew protocols (currently PostgreSQL, HTTP and HTTP2), but for these protocols it offers a high-level,\nclear display of the network traffic, tailored for each specific protocol.\nHotwire can open tcpdump files or record traffic through a fifo file, therefore without requiring elevated privileges.\n\n## The UI layout\n\n![Main view screenshot](https://raw.githubusercontent.com/wiki/emmanueltouzery/Hotwire/pic1.png)\n\nThe main view is divided in four panes; from left to right and top to bottom:\n1. The servers; Hotwire is only interested in client-server protocols, so it can group packets by server.\n   We also display metadata there, like the number of remote hosts, the number of TCP sessions, and details\n   depending on the protocol (host name for HTTP, database name for PGSQL);\n2. The messages. In the case of HTTP, we group request \u0026 response in one single row, in the case of PGSQL\n   we group query and query result in one row as well. It's possible to sort by any column. The color on the\n   left highlights the TCP stream, so it's easier to track which messages are related to one another;\n3. The incoming connections. These hold for the currently selected server only. We can see remote hosts and\n   tcp streams, and selecting items here will filter the messages grid;\n4. The message details view. Showing details about the currently selected message.\n\n## Protocols\n\nCurrently Hotwire supports:\n\n* HTTP\n* HTTP2\n* PGSQL (PostgreSQL wire protocol)\n\nNote that for PGSQL you can often see \"Unknown statement\". This can happen with prepared statements,\nwhere the statement is declared once and then reused. If the declaration is not caught in the recording,\nHotwire has no way of recovering it and it must show \"Unknown statement\". It can still recover result rows\nand parameters (without types or column names though).\n\n## HTTPS and HTTP2: decryption\n\nIt is possible to view encrypted traffic in Hotwire, the same as with wireshark and tshark, if you have the\nencryption keys. You can recover the encryption keys from server software (for instance apache tomcat) or client\nsoftware (firefox, chrome). To recover the keys from chrome or firefox, launch them with:\n\n    SSLKEYLOGFILE=browser_keylog.txt firefox\n    \n(or same with google-chrome)\nMore information is available [in the wireshark wiki](https://wiki.wireshark.org/TLS). \n\nHotwire doesn't allow to open separately keylog files. Instead, you should use `editcap` to merge the\nsecrets in the pcap file and open the combined file with Hotwire:\n\n    editcap --inject-secrets tls,/path/to/keylog.txt ~/testtls.pcap ~/outtls.pcapng\n\n## Live traffic recording\n\nYou can also record and observe live network traffic in Hotwire. For that, Hotwire will open a FIFO, and\nlisten for pcap contents on that FIFO. Note that this will not work on Windows.\nThen `tcpdump` can be invoked to write pcap data to the fifo, and Hotwire will capture and display the data\nin real-time. That way Hotwire can display live traffic without elevated privileges.\n\nWhen Hotwire is run as a linux native app, it can invoke `pkexec` to launch `tcpdump` with elevated privileges\nand everything works transparently to the user. When it runs as a flatpak or under OSX for instance, Hotwire\ngives to the user a `tcpdump` command-line to run with `sudo`.\n\n## Installation\n\nThe recommended way to install the application on linux is with flatpak. For other platforms you'll have to\nbuild from source -- using [the rust toolchain](https://rustup.rs/). `Hotwire` requires `tshark` to be installed and in the PATH\nto operate correctly, and `tcpdump` to record traffic, and on non-flatpak linux `pkexec` for simple recording.\n\nTo build from source: [install rust and cargo](https://rustup.rs/), then run `cargo run --release`. The binary in `target/release/hotwire`\ncan be copied anywhere, as it embeds icons and other dependencies (but not shared libraries like gtk). On OSX,\nyou'll need gtk+3 and adwaita-icon-theme from homebrew.\n\n![HTTP traffic](https://raw.githubusercontent.com/wiki/emmanueltouzery/Hotwire/pic2.png)\n\n![Dark mode and SSL](https://raw.githubusercontent.com/wiki/emmanueltouzery/Hotwire/pic3.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femmanueltouzery%2Fhotwire","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Femmanueltouzery%2Fhotwire","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femmanueltouzery%2Fhotwire/lists"}