Skip to content

feat: nDPI JA3/JA3S TLS fingerprints per conversation#63

Merged
NotYuSheng merged 2 commits intomainfrom
feature/ndpi-ja3-fingerprints
Mar 28, 2026
Merged

feat: nDPI JA3/JA3S TLS fingerprints per conversation#63
NotYuSheng merged 2 commits intomainfrom
feature/ndpi-ja3-fingerprints

Conversation

@NotYuSheng
Copy link
Copy Markdown
Owner

Closes #44

Summary

  • V8 migration: adds ja3_client VARCHAR(32) and ja3_server VARCHAR(32) to conversations
  • NdpiService: parses [JA3C: hash] and [JA3S: hash] from ndpiReader -v 2 output in the same single pass (regex anchored to 32-char hex strings to avoid false positives); JA3_HASH_LENGTH = 32 constant defined on ConversationEntity
  • Backend propagation: ConversationEntity, ConversationResponse, ConversationDetailResponse, and all AnalysisService builder blocks expose both hashes
  • ConversationDetail: JA3 Client and JA3S Server hashes rendered in <code> tags when present (TLS flows only)

Test plan

  • Upload zoom.pcap — click a TLS conversation and confirm JA3 Client / JA3S Server hashes appear in the detail panel
  • FTP / UDP conversations should show no JA3 fields
  • Multiple Zoom TLS flows to the same host should share the same JA3C hash (same client TLS implementation)

🤖 Generated with Claude Code

- V8 migration: add ja3_client VARCHAR(32) and ja3_server VARCHAR(32) to conversations
- ConversationEntity: add JA3_HASH_LENGTH = 32 constant; ja3Client and ja3Server fields
- NdpiService: add JA3C and JA3S regex patterns, parse [JA3C: hash] and [JA3S: hash]
  from ndpiReader -v 2 output in the same single pass
- Propagate ja3Client/ja3Server through PcapParserService.ConversationInfo,
  ConversationResponse, ConversationDetailResponse, and all AnalysisService builders
- Frontend: ja3Client/ja3Server on Conversation type and conversationService mapping
- ConversationDetail: show JA3 Client and JA3S Server hashes in monospace code tags
  when present (TLS flows only)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request implements JA3 client and server fingerprinting by updating the database schema, backend entities, DTOs, and the nDPI parsing service. The frontend is also updated to display these fingerprints in the conversation detail view. Feedback includes suggestions to use existing constants in regex patterns to avoid magic numbers, refactor duplicated extraction logic into a helper method, and improve the readability of a long log statement.

Comment thread backend/src/main/java/com/tracepcap/analysis/service/NdpiService.java Outdated
Comment thread backend/src/main/java/com/tracepcap/analysis/service/NdpiService.java Outdated
- JA3C/JA3S patterns now use ConversationEntity.JA3_HASH_LENGTH constant
  instead of magic number 32
- Shorten nDPI enrichment log statement for readability
- Extract repeated JA3 hash extraction logic into extractHash() helper

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@NotYuSheng NotYuSheng merged commit 779b7c9 into main Mar 28, 2026
@NotYuSheng NotYuSheng deleted the feature/ndpi-ja3-fingerprints branch March 28, 2026 02:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: nDPI JA3/JA3S TLS fingerprints per conversation

1 participant