UNPKG

pcap-element

Version:

A reusable Web Component for PCAP file preview

343 lines (234 loc) 11 kB
# pcap-element 一个可复用的 Web Component,自定义标签 `<pcap-element>`,用于在网页中直接预览和分析PCAP网络抓包文件。 --- A reusable Web Component `<pcap-element>` for previewing and analyzing PCAP network capture files directly in the browser. --- ## ✨ 特性 | Features - 一行代码集成PCAP文件预览 - 支持TCP/UDP/ICMP/SMTP/ARP/IPv6等协议解析 - 现代化UI,支持自定义样式 - 纯前端,无需后端依赖 - 支持npm、CDN两种集成方式 - 内置样式和国际化,无外部依赖 - 支持解析模式和16进制模式切换 - 16进制包标题支持中英文国际化 - 切换按钮有loading状态,防止误触 - 代码结构优化,方法职责清晰,类型安全 - ESLint统一代码风格,自动修复 - One-line integration for PCAP preview - Supports TCP/UDP/ICMP/SMTP/ARP/IPv6 protocol parsing - Modern UI, customizable styles - Pure frontend, no backend required - Available via npm or CDN - Built-in styles and i18n, no external dependencies - Supports parsed and hex display modes - Hex view title supports i18n (EN/中文) - Toggle button has loading state to prevent misclicks - Refactored code structure, clear methods, type safety - ESLint unified code style, auto-fix ## 📦 安装 | Installation ```bash npm install pcap-element ``` > 2.2.0及以后版本,npm包默认入口为ESM构建(dist/pcap-element.esm.min.js)。如需CommonJS/UMD环境支持,请手动引用dist/pcap-element.umd.min.js。 ## 🚀 快速上手 | Quick Start ### 1. 在你的入口文件引入组件 | Import in your entry file ```js // 只需要引入JS文件,样式已内置 import 'pcap-element/dist/pcap-element.esm.min.js'; ``` ### 2. 在HTML中直接使用 | Use in HTML ```html <!-- 基础用法 --> <pcap-element src="/your-file.pcap"></pcap-element> <!-- 指定语言 --> <pcap-element src="/your-file.pcap" lang="en-us"></pcap-element> <!-- 启用切换按钮(可切换16进制/解析模式) --> <pcap-element src="/your-file.pcap" enableHexToggle></pcap-element> <!-- 启用全屏按钮 --> <pcap-element src="/your-file.pcap" showFullscreenBtn></pcap-element> ``` ### 3. 支持CDN方式 | CDN Usage ```html <!-- 只需要引入JS文件 --> <script type="module" src="https://unpkg.com/pcap-element/dist/pcap-element.esm.min.js"></script> <pcap-element src="/your-file.pcap"></pcap-element> ``` ## 📝 API ### 属性 | Attributes | 属性 | 类型 | 默认值 | 说明 | |------|--------|--------|----------------------| | src | string | - | PCAP文件的URL或路径 | | lang | string | zh-cn | 语言(支持zh-cn, en-us)| | enableHexToggle | boolean | false | 是否显示切换按钮(布尔属性,控制能否切换16进制/解析模式)| | showFullscreenBtn | boolean | false | 是否显示全屏按钮(布尔属性,显示右上角全屏/恢复按钮)| | useCanvas | boolean | false | 是否启用大文件canvas分段渲染(仅设置为'true'时生效) | ### 事件 | Events | 事件名 | 说明 | |--------|------| | 无 | | ### 方法 | Methods | 方法 | 说明 | |------|------| | 无 | | ## 🧩 类型声明 | Type Declarations 如需类型提示,可在TypeScript项目中: ```ts import type { PcapPacket, PcapData } from 'pcap-element/dist/pcap-element.d.ts'; ``` ## 🎨 样式自定义 | Style Customization - 默认样式已内置,无需额外CSS文件 - 可通过Shadow DOM中的CSS变量进行主题定制 - 支持响应式设计,适配移动端 - Built-in styles, no additional CSS required - Customize via CSS variables in Shadow DOM - Responsive design, mobile-friendly ## 🧑‍💻 代码风格与结构 | Code Style & Structure - 采用 ESLint 统一代码风格,支持 TypeScript 推荐规则 - 复杂方法已拆分为职责单一的辅助方法,便于维护 - 关键类型均有 TypeScript 明确声明,避免 any - 切换按钮有 loading 状态,防止误触 ## 属性说明 | 属性名 | 类型 | 默认值 | 说明 | | -------------- | ------- | -------- | ---- | | src | string | - | PCAP文件URL | | lang | string | zh-cn | 语言(zh-cn/en) | | enableHexToggle| boolean | false | 是否显示16进制切换按钮 | | showFullscreenBtn | boolean | false | 是否显示全屏按钮 | | useCanvas | boolean | false | 是否启用大文件canvas分段渲染(仅设置为'true'时生效) | ## 使用示例 ```html <!-- 默认全部HTML渲染 --> <pcap-element src="demo.pcap"></pcap-element> <!-- 启用大文件canvas分段渲染 --> <pcap-element src="demo.pcap" useCanvas="true"></pcap-element> ``` ## FAQ ### useCanvas 相关 - **Q: useCanvas 有什么作用?** - 当PCAP文件很大(>5000行)时,HTML渲染会变慢。设置 useCanvas="true" 后,大文件会自动分段用canvas渲染,极大提升性能。canvas渲染与HTML视觉完全一致,支持斑马色、对齐等。 - **Q: useCanvas 默认开启吗?** - 默认关闭。只有设置 useCanvas="true" 时才启用canvas分段渲染。 - **Q: useCanvas 关闭时会怎样?** - 无论文件多大,全部用HTML渲染,适合需要复制、选中、无canvas依赖的场景。 ### useCanvas (English) - **Q: What does useCanvas do?** - When the PCAP file is very large (>5000 lines), HTML rendering can become slow. Setting useCanvas="true" will automatically use canvas chunk rendering for large files, greatly improving performance. The canvas rendering is visually identical to HTML, supporting zebra striping, alignment, and grouping. - **Q: Is useCanvas enabled by default?** - No, it is disabled by default. Canvas chunk rendering is only enabled when useCanvas="true" is set. - **Q: What happens if useCanvas is disabled?** - No matter how large the file, all rendering uses HTML. This is suitable for scenarios where you need to copy, select, or avoid canvas dependencies. ### 1. PCAP文件无法加载? - 检查src路径是否正确、文件是否支持CORS、服务器是否返回二进制内容 ### 1. PCAP file cannot be loaded? - Check if the src path is correct, CORS is enabled, and the server returns binary content. ### 2. 只支持标准PCAP格式? - 是,magic number需为a1b2c3d4/d4c3b2a1/a1b23c4d/4d3cb2a1 ### 2. Only standard PCAP format supported? - Yes, the magic number must be a1b2c3d4/d4c3b2a1/a1b23c4d/4d3cb2a1 ### 3. 如何在React/Vue/Angular中用? - 只需在入口引入js文件,然后像普通HTML标签一样用即可 ### 3. How to use in React/Vue/Angular? - Just import the JS file in your entry and use it as a normal HTML tag. ### 4. 为什么不需要引入CSS文件? - 样式已内置到组件中,避免外部依赖和404错误 ### 4. Why no need to import CSS? - Styles are built-in to the component to avoid external dependencies and 404 errors. ### 5. 如何切换显示模式? - 使用`enableHexToggle`属性:`enableHexToggle`显示切换按钮,允许用户切换16进制/解析模式;不加时始终为解析模式 ### 5. How to switch display mode? - Use the `enableHexToggle` attribute: `enableHexToggle` shows the toggle button, allowing users to switch between hex/parsed mode. If not set, always parsed mode. ### 6. 如何显示全屏按钮? - 使用`showFullscreenBtn`属性:`showFullscreenBtn`显示右上角全屏/恢复按钮,点击可切换全屏和普通模式 ### 6. How to show the fullscreen button? - Use the `showFullscreenBtn` attribute: `showFullscreenBtn` shows the fullscreen/exit button at the top right, allowing users to toggle fullscreen mode. ## 🤝 贡献 | Contributing - 欢迎PR、Issue、建议 - 代码风格TypeScript+ESLint - 入口文件:src/pcap-element-lib.ts - PRs, issues, and suggestions welcome - Code style: TypeScript + ESLint - Entry: src/pcap-element-lib.ts ## 📄 License MIT --- ## English Version ### Introduction A reusable Web Component `<pcap-element>` for previewing and analyzing PCAP network capture files directly in the browser. ## Features - One-line integration for PCAP preview - Supports TCP/UDP/ICMP/SMTP/ARP/IPv6 protocol parsing - Modern UI, customizable styles - Pure frontend, no backend required - Available via npm or CDN - Built-in styles and i18n, no external dependencies - Supports parsed and hex display modes - Hex view title supports i18n (EN/中文) - Toggle button has loading state to prevent misclicks - Refactored code structure, clear methods, type safety - ESLint unified code style, auto-fix ## Installation ```bash npm install pcap-element ``` ## Quick Start 1 Import in your entry file: ```js // Only need to import JS file, styles are built-in import 'pcap-element/dist/pcap-element.esm.min.js'; ``` 2 Use in HTML: ```html <!-- Basic usage --> <pcap-element src="/your-file.pcap"></pcap-element> <!-- Specify language --> <pcap-element src="/your-file.pcap" lang="en-us"></pcap-element> <!-- Enable toggle button (switch between hex/parsed) --> <pcap-element src="/your-file.pcap" enableHexToggle></pcap-element> <!-- Enable fullscreen button --> <pcap-element src="/your-file.pcap" showFullscreenBtn></pcap-element> ``` 3 Or via CDN: ```html <!-- Only need to import JS file --> <script type="module" src="https://unpkg.com/pcap-element/dist/pcap-element.esm.min.js"></script> <pcap-element src="/your-file.pcap"></pcap-element> ``` ## API ### Attributes | Name | Type | Default | Description | |------|--------|---------|----------------------------| | src | string | - | URL or path to PCAP file | | lang | string | zh-cn | Language (supports zh-cn, en-us) | | enableHexToggle | boolean | false | Show toggle button (boolean attribute, controls if user can switch hex/parsed mode) | | showFullscreenBtn | boolean | false | Show fullscreen button (boolean attribute, shows fullscreen/exit button at top right) | ### Events None ### Methods None ## Type Declarations For TypeScript: ```ts import type { PcapPacket, PcapData } from 'pcap-element/dist/pcap-element.d.ts'; ``` ## Style Customization - Built-in styles, no additional CSS required - Customize via CSS variables in Shadow DOM - Responsive design, mobile-friendly ## Code Style & Structure - ESLint unified code style, TypeScript recommended rules - Complex methods split into clear helpers for maintainability - All key types are strictly typed, no any - Toggle button has loading state to prevent misclicks - Hex view title supports i18n (EN/中文) ## FAQ 1. PCAP file not loading? - Check src path, CORS, and server binary response 2. Only standard PCAP format supported? - Yes, magic number must be a1b2c3d4/d4c3b2a1/a1b23c4d/4d3cb2a1 3. How to use in React/Vue/Angular? - Import js file in your entry and use `<pcap-element>` as a normal HTML tag 4. Why no CSS file needed? - Styles are built-in to avoid external dependencies and 404 errors 5. How to switch display mode? - Use the `enableHexToggle`