FrameAssembly (frameassembly) — Create Custom .pcap Packet Captures from Plain Text Without Root or Python
60-Second Quickstart • CLI Commands (frameassembly show) • Generate .fasm with ChatGPT / Claude / Copilot • Wireshark / tcpdump to .fasm Cheat Sheet • Copy-Paste Packet Recipes • All 81 Protocols • Documentation
FrameAssembly (frameassembly v1.3.0) is a rootless packet generator that turns a plain-text packet recipe (.fasm) into a standard .pcap / .pcapng packet capture file across 81 network protocols spanning Layers 2 through 7.
It is built for network technicians, firewall engineers, Linux system administrators, NOC/SOC analysts, and OT/SCADA integrators who want a Scapy alternative without Python and without fighting raw hexadecimal byte offsets in text2pcap. You simply list the devices in your scenario, write one line per packet using everyday networking terms (VLAN 100, TCP SYN, DSTPORT 443, DSCP 46, SNMP3 TRAP), and FrameAssembly automatically builds the Ethernet/IPv4/IPv6/TCP/UDP headers, calculates lengths and checksums, swaps ports on reply packets (<-), and tracks TCP SEQ/ACK numbers—producing a clean, zero-noise .pcap file ready to open in Wireshark / tshark, feed into Suricata / Zeek, or transmit onto a live network port with tcpreplay.
What Network Technicians Search For (and Solve in Seconds with FrameAssembly)
- Create a custom
.pcapfile from text without root (sudo): Generate bit-accurate.pcapfiles in normal user space on any workstation, jump host, or CI runner—no raw sockets, kernel drivers, or root access required. - Generate SNMPv1, SNMPv2c, and encrypted SNMPv3
authPrivtrap.pcapfiles: Test Zabbix, LibreNMS, Checkmk, PRTG, SolarWinds, Datadog, orsnmptrapdalert rules with realMD5/SHA-1/SHA-256/SHA-512authentication andDES/AES-128encryption without waiting for a switch power supply or BGP peer to fail. - Test firewall ACLs with custom
TCP SYN,RST, out-of-stateACK, and fragmented packets: Craft exact permitted and blocked flows, Path MTU Discovery (DF) probes, IPv4 fragments (MF+FRAGOFFSET), and spoofed-source egress tests. - 802.1Q
VLAN, 802.1adQinQ,MPLS, andDSCPQoS packet crafting tool: Tag any packet with single VLANs, 802.1pPCP/DEIpriority bits, carrierQinQdouble tags, MPLS label stacks, or DiffServDSCP/ECNmarkings that desktop OS sockets strip or block. - Wireshark /
tcpreplay/ Suricata / Zeek test.pcapgenerator: Create clean, deterministic test captures for IDS/IPS signature validation (DNS,TLS 1.3 SNI/ALPN,HTTP,SMB,Kerberos), NetFlow/IPFIX/sFlow collectors, or vendor TAC bug tickets with zero background LAN noise. - Modbus, DNP3, S7comm, BACnet, EtherNet/IP, and OPC UA packet generator: Validate industrial OT firewall conduits and SCADA security sensors without physical PLCs.
| Capability | FrameAssembly (.fasm) |
Python + Scapy |
text2pcap / Hex Editing |
Capturing Live Lab Traffic |
|---|---|---|---|---|
| Who It Is Built For | Network technicians & firewall/NOC engineers (no coding needed) | Python programmers & developers | Analysts editing raw hex dumps | Engineers with spare physical/VM labs |
| How You Write Packets | Plain-text hosts & 1-line-per-packet flows | Python scripts, loops & class objects | Raw hexadecimal byte offsets | Live device CLI & OS commands |
| Low-Level Header Control | Full control over flags, VLAN/QinQ/MPLS tags, QoS, TTL & options | Full control via nested Python code | Manual bit-by-bit hex math | Hard to force specific flags, errors, or faults |
| Unset Optional Fields | Works out of the box with standard RFC wire defaults | Varies by protocol layer | None (every byte typed by hand) | OS / vendor stack dependent |
Checksums & TCP SEQ/ACK |
Automatic checksums, TCP SEQ/ACK math & reply port swapping on <- |
Manual per-packet sequence & port math | Manual hex recalculation on every edit | Handled by OS kernel (normal flows only) |
SNMPv3 authPriv Encryption |
Built-in SNMPv3 encryption (MD5/SHA/SHA-2 + DES/AES) |
Manual ASN.1 BER & crypto code | Impractical by hand | Requires configuring a live SNMPv3 agent |
Rootless .pcap for tcpreplay |
No root needed to build .pcap; zero noise; ready for tcpreplay |
Root needed for raw socket sending | Normal user space | Root required; captures unwanted LAN noise |
60-Second Quickstart
Step 1: Install frameassembly
Option A — One-Line Linux Installer (No Rust or Programming Experience Needed):
|
What install.sh does automatically:
- Checks that basic system tools (
curland a standard C linker such ascc/gcc) are present. - Installs the official user-space Rust build tool (
~/.cargo) in your home directory if not already present (no system-wide root library changes). - Installs the
frameassemblycommand into~/.cargo/bin/frameassembly. - Automatically installs the
.fasmcolor syntax-highlighting extension if VS Code (code) or Antigravity (agy) is detected.
Option B — Install via Cargo (Linux, macOS, or Windows with Rust >= 1.85):
Optional — Manual VS Code / Antigravity .vsix Syntax Extension:
&& &&
Step 2: Write a Plain-Text .fasm Packet Recipe (demo.fasm)
Every protocol works out of the box with standard RFC defaults—you only type the fields you want to customize:
// Define the devices in your scenario
host client { ip 10.0.0.10 mac 00:11:22:33:44:55 }
host server { ip 10.0.0.80 mac aa:bb:cc:dd:ee:ff }
// List the packets exchanged between them (1 line = 1 Ethernet frame)
flow web_session(c, s) {
c -> s tcp syn srcport 51234 dstport 80 win 65535 mss 1460 wait 1ms
c <- s tcp syn ack win 65535 mss 1460 wait 1ms
c -> s tcp ack wait 1ms
c -> s http get uri "/index.html" host_hdr "example.com" wait 5ms
c <- s http status 200 reason "OK" body "<h1>Hello</h1>" wait 2ms
}
// Build the packet capture
compile {
web_session(client, server)
}
Step 3: Preview Frames with frameassembly show or Build output.pcap
$ frameassembly show demo.fasm
# Time (ms) Source -> Destination Proto Bytes Summary
--------------------------------------------------------------------------------------------------------------
1 0.000 10.0.0.10 -> 10.0.0.80 TCP 58 51234 -> 80 [SYN] seq=1000 len=0
2 1.000 10.0.0.80 -> 10.0.0.10 TCP 58 80 -> 51234 [SYN ACK] seq=2000 ack=1001 len=0
3 2.000 10.0.0.10 -> 10.0.0.80 TCP 54 51234 -> 80 [ACK] seq=1001 ack=2001 len=0
4 3.000 10.0.0.10 -> 10.0.0.80 HTTP 97 51234 -> 80 [ACK PSH] seq=1001 ack=2001 len=43
5 8.000 10.0.0.80 -> 10.0.0.10 HTTP 126 80 -> 51234 [ACK PSH] seq=2001 ack=1044 len=72
$ frameassembly demo.fasm -o output.pcap
Successfully parsed 2 hosts, 1 flows
Starting PCAP compilation...
Successfully generated output.pcap (5 frames, 393 bytes, duration 8.000 ms)
You can also inspect the capture with tshark / Wireshark or transmit the frames onto a live network interface with tcpreplay:
# Inspect with tshark or open in Wireshark GUI
&
# Replay onto a physical NIC, VLAN trunk, or firewall test port
What FrameAssembly handled for you automatically:
- Automatic Port Swapping on
<-:srcport 51234 dstport 80onc -> sautomatically reversed to80 -> 51234onc <- swithout retyping port numbers. - Automatic TCP
SEQ&ACKTracking AcrossTCPandHTTP: Thehttprequest and response automatically shared the connection state from thetcphandshake, emittedPSH, ACKframes on port80, and advancedSeqandAcknumbers by the exact byte length of each HTTP payload. - Automatic Checksums & Nanosecond
WAITTimestamps: Ethernet framing, IPv4 header checksums, TCP/UDP checksums, HTTPContent-Length, and exactwaittimestamp deltas (1.000 ms,2.000 ms,3.000 ms,8.000 ms) were calculated automatically.
CLI Commands
| Command | What It Does | Example |
|---|---|---|
frameassembly <file.fasm> |
Builds output.pcap from <file.fasm> |
frameassembly demo.fasm |
frameassembly <file.fasm> -o <file.pcap> |
Writes the generated packet capture to a specific filename | frameassembly demo.fasm -o acl_test.pcap |
frameassembly show <file.fasm> |
Validates <file.fasm> and prints the packet ladder table directly in your terminal without writing a .pcap file |
frameassembly show demo.fasm |
# Preview the frames in your terminal without generating a .pcap file
# Generate a .pcap file (defaults to output.pcap, or specify -o)
Use ChatGPT, Claude, or Copilot to Write .fasm from Plain English
Don't want to write .fasm by hand? FrameAssembly publishes a machine-readable reference sheet (llms.txt) specifically designed for AI assistants. Copy and paste the prompt below into ChatGPT, Claude, Microsoft Copilot, or Cursor, describe the network scenario you want in plain English, and it will output a valid .fasm file ready to compile:
Read the FrameAssembly (.fasm) syntax reference at:
https://raw.githubusercontent.com/SteveWinschel/FrameAssembly/main/llms.txt
Write a complete, compilable FrameAssembly (.fasm) packet recipe with HOST, FLOW, and COMPILE blocks for the following network scenario:
[Describe your scenario here — for example: "A branch router at 10.10.1.1 sending an encrypted SNMPv3 SHA256 + AES trap to NMS server 10.10.1.50 on VLAN 100, followed by a TCP 3-way handshake and HTTPS TLS 1.3 ClientHello to vault.example.com"]
Rules to follow:
- Use only canonical HOST <id> { IP <ip> [MAC <mac>] }, FLOW <id>(<params>) { ... }, and COMPILE { ... } blocks.
- Use SRCPORT, DSTPORT, ACKNUM, bare TCP flag names (SYN ACK), and trailing WAIT <n><ms|s|us|ns>.
- Output only the compilable .fasm file.
From Wireshark / tcpdump to .fasm Translation Table
If you already know how to read Wireshark display filters, tcpdump expressions, or Cisco/Linux interface outputs, you already know 90% of FrameAssembly:
What You See in Wireshark / tcpdump / Switch CLI |
Wireshark Display Filter / tcpdump |
How You Write It in .fasm |
Reference Table Link |
|---|---|---|---|
| Linux / Wireshark colon MAC | eth.addr == 00:1a:2b:3c:4d:5e |
mac 00:1a:2b:3c:4d:5e (or srcmac / dstmac) |
L2 MAC Formats |
Windows ipconfig /all hyphen MAC |
00-1A-2B-3C-4D-5E |
mac 00-1A-2B-3C-4D-5E (supported natively!) |
L2 MAC Formats |
Cisco IOS show mac address-table dotted MAC |
001a.2b3c.4d5e |
mac 001a.2b3c.4d5e (supported natively!) |
L2 MAC Formats |
| Custom Ethernet EtherType | eth.type == 0x88cc |
ethertype 0x88cc |
L2 EtherType Overrides |
| 802.1Q VLAN ID & 802.1p CoS Priority | vlan.id == 100 && vlan.priority == 5 |
vlan 100 pcp 5 dei 0 |
802.1p CoS (PCP) Table |
| 802.1ad Carrier QinQ Double Tag | vlan.id == 2000 && vlan.id == 100 |
qinq 2000 inner_vlan 100 |
VLAN & QinQ Guide |
MPLS Label, Traffic Class (EXP) & TTL |
mpls.label == 16000 && mpls.exp == 5 |
mpls 16000 exp 5 bos 1 mpls_ttl 64 |
MPLS Labels Guide |
DiffServ QoS (DSCP) & ECN |
ip.dsfield.dscp == 46 (EF Voice) |
dscp 46 ecn 0 |
DiffServ DSCP & ECN Table |
| IPv4 TTL or IPv6 Hop Limit | ip.ttl == 64 / ipv6.hlim == 64 |
ttl 64 (works on both IPv4 and IPv6) |
Universal L3 Modifiers |
IPv4 Don't Fragment (DF) / Fragmentation |
ip.flags.df == 1 / ip.frag_offset |
df or ipid 0x1234 mf fragoffset 0 |
IPv4 Fragmentation Guide |
| TCP / UDP / SCTP Source & Dest Ports | tcp.srcport == 50000 && tcp.dstport == 443 |
srcport 50000 dstport 443 |
L4 Transports Guide |
TCP Flags (SYN, ACK, RST, FIN, PSH) |
tcp.flags.syn == 1 && tcp.flags.ack == 1 |
tcp syn ack (bare flag words, no brackets) |
TCP Flags & Options |
| TCP Sequence, Ack Number & Window Size | tcp.seq == 1000 && tcp.ack == 2000 |
seq 1000 acknum 2000 win 65535 |
TCP Sequence Tracking |
SNMP Trap / Poll OIDs (sysName, linkDown) |
snmp.name == 1.3.6.1.2.1.1.5.0 |
varbind 1.3.6.1.2.1.1.5.0 string "sw-01" |
Standard MIB-II OID Table |
Copy-Paste .fasm Recipes for Common Network Tasks
Recipe 1: Generate Encrypted SNMPv3 authPriv Trap (SHA-256 + AES-128) & SNMPv2c Poll .pcap
Test your NMS trap receiver or polling alert rules without touching production hardware:
host core_switch { ip 10.10.1.2 mac 00:1a:2b:3c:4d:01 }
host nms_server { ip 10.10.1.50 mac 00:1a:2b:3c:4d:50 }
flow snmp_alert_and_poll(sw, nms) {
// Encrypted SNMPv3 linkDown trap (HMAC-SHA256 + AES-128) on VLAN 100
sw -> nms vlan 100 snmp3 trap user "netops" engineid "80001f8801" engineboots 5 enginetime 3600 auth sha256 "AuthPass123!" priv aes "PrivPass123!" oid 1.3.6.1.6.3.1.1.5.3 varbind 1.3.6.1.2.1.2.2.1.8.1 int 2 wait 5ms
// SNMPv2c GET poll for sysName.0 and switch response
nms -> sw vlan 100 snmp2 get community "noc_ro" reqid 101 varbind 1.3.6.1.2.1.1.5.0 null wait 2ms
nms <- sw vlan 100 snmp2 response community "noc_ro" reqid 101 varbind 1.3.6.1.2.1.1.5.0 string "core-sw-01.dc1" wait 2ms
}
compile {
snmp_alert_and_poll(core_switch, nms_server)
}
Recipe 2: Test Firewall ACLs with Custom TCP SYN, RST ACK & ICMP Unreachable Packets
Verify permitted handshakes, blocked ports (TCP RST), and ACL-prohibited ICMP responses in a single .pcap:
host dmz_scanner { ip 172.16.99.9 mac 00:1a:2b:3c:4d:09 }
host target_fw { ip 10.10.1.1 mac 00:1a:2b:3c:4d:01 }
flow firewall_acl_test(scanner, fw) {
// Permitted HTTPS port 443 TCP 3-way handshake
scanner -> fw vlan 200 tcp syn srcport 54320 dstport 443 win 64240 mss 1460 wait 1ms
scanner <- fw vlan 200 tcp syn ack win 65535 mss 1460 wait 1ms
scanner -> fw vlan 200 tcp ack wait 2ms
// Blocked SSH port 22 attempt rejected with TCP RST + ACK
scanner -> fw vlan 200 tcp syn srcport 54321 dstport 22 win 64240 wait 1ms
scanner <- fw vlan 200 tcp rst ack wait 2ms
// Blocked ping answered with ICMP Destination Unreachable (Code 13: Administratively Prohibited)
scanner -> fw vlan 200 ttl 64 icmp echo_request id 500 seq 1 payload "ACL_PING_TEST" wait 1ms
scanner <- fw vlan 200 ttl 64 icmp dest_unreach code 13
}
compile {
firewall_acl_test(dmz_scanner, target_fw)
}
Recipe 3: 802.1Q VLAN, Carrier QinQ, MPLS & DiffServ DSCP QoS Packet Crafting
Verify switch QoS queues, 802.1p CoS priority bits, carrier double-tagging, and MPLS label stacks:
host branch_cpe { ip 10.220.1.10 mac 00:50:56:c0:01:10 }
host hq_gateway { ip 10.220.1.200 mac 00:50:56:c0:01:c8 }
flow metro_qos_and_tls(cpe, hq) {
// VoIP RTP audio over 802.1Q VLAN 110 (802.1p PCP 5) + DiffServ EF (DSCP 46)
cpe -> hq vlan 110 pcp 5 dei 0 dscp 46 rtp pt 0 seq 1 timestamp 160 ssrc 0x10203040 payload "G711_VOICE" wait 5ms
// TLS 1.3 handshake carried over QinQ (S-VLAN 2000 / C-VLAN 150) + MPLS (Label 40960) + DSCP 46
cpe -> hq qinq 2000 inner_vlan 150 pcp 6 mpls 40960 exp 6 bos 1 mpls_ttl 64 dscp 46 ttl 64 tls client_hello sni "vault.hq.example.com" ciphersuite 4866 alpn "h2" wait 5ms
cpe <- hq qinq 2000 inner_vlan 150 pcp 6 mpls 40960 exp 6 bos 1 mpls_ttl 63 dscp 46 ttl 63 tls server_hello ciphersuite 4866 alpn "h2" wait 5ms
}
compile {
metro_qos_and_tls(branch_cpe, hq_gateway)
}
Recipe 4: Industrial OT / SCADA Packet Generator (Modbus, DNP3, S7comm, BACnet, OPC UA)
Test industrial zone firewalls and OT intrusion detection sensors without physical PLCs:
host scada_hmi { ip 192.168.100.10 mac 00:1b:21:a0:00:10 }
host plant_plc { ip 192.168.100.50 mac 00:0e:8c:a0:00:50 }
flow ot_firewall_test(hmi, plc) {
hmi -> plc vlan 110 modbus read_holding_registers txid 1 unitid 1 addr 40001 count 2 wait 2ms
hmi <- plc vlan 110 modbus read_holding_registers txid 1 unitid 1 count 2 is_response wait 2ms
hmi -> plc vlan 110 dnp3 read src 1 dst 10 group 60 variation 1 wait 2ms
hmi -> plc vlan 110 s7comm setup_comm rosctr "JOB" pdu_ref 101 wait 2ms
hmi -> plc vlan 110 bacnet read_property invoke_id 1 object_type 0 object_instance 1 property_id 85 wait 2ms
hmi -> plc vlan 110 opcua msg_type "HEL" chunk_type "F" endpoint_url "opc.tcp://192.168.100.50:4840"
}
compile {
ot_firewall_test(scada_hmi, plant_plc)
}
Syntax Guide
1. host, flow, compile & Reusing Flows Across IPv4 and IPv6
FrameAssembly is case-insensitive everywhere (host or HOST, tcp or TCP, ms or MS). Comments start with //.
host <name> { ip <address> [mac <mac>] }: Gives a readable name to an IPv4 or IPv6 device. You can writemacin standard colon format (00:1a:2b:3c:4d:5e), Windows hyphen format (00-1A-2B-3C-4D-5E), or Cisco dotted-quad format (001a.2b3c.4d5e). Ifmacis omitted, FrameAssembly assigns a consistent unicast MAC—or automatically derives the standard RFC 1112 (01:00:5e:xx:xx:xxfor IPv4) or RFC 2464 (33:33:xx:xx:xx:xxfor IPv6) multicast MAC when the IP is a multicast group.flow <name>(<endpoint1>, <endpoint2>, ...) { ... }: Lists a sequence of packets between placeholder endpoints (1 line = 1 frame):A -> B:Ais the sender (source),Bis the receiver (destination).A <- B:Bis the sender (source),Ais the receiver (destination), automatically swapping source and destination ports on replies.
compile { ... }&loop <count> { ... }: Builds the.pcapby plugging yourhostdefinitions into yourflowtemplates. You can write a traffic flow once and run it with both IPv4 and IPv6 hosts:
host client_v4 { ip 192.168.1.50 mac 00-1A-2B-3C-4D-5E }
host server_v4 { ip 192.168.1.100 mac 001a.2b3c.4d5f }
host client_v6 { ip 2001:db8::10 mac 00:11:22:33:44:55 }
host server_v6 { ip 2001:db8::100 }
host mdns_mcast { ip 224.0.0.251 }
flow tcp_handshake(client, server) {
client -> server tcp syn srcport 50100 dstport 443 win 65535
client <- server tcp syn ack win 65535 wait 1ms
client -> server tcp ack wait 1ms
}
flow mdns_probe(node, mcast) {
node -> mcast mdns query qname "_http._tcp.local" qtype "PTR" wait 2ms
}
compile {
loop 2 {
tcp_handshake(client_v4, server_v4)
tcp_handshake(client_v6, server_v6)
}
mdns_probe(client_v4, mdns_mcast)
}
2. Universal Layer 2–4 Modifiers
Any packet line can attach Layer 2 trunk tags, Layer 3 QoS/fragmentation headers, Layer 4 port/TCP options, raw payloads, and capture timestamps alongside any protocol:
| Category | Modifiers | Networking Purpose & Wire Effect |
|---|---|---|
| Layer 2 | SRCMAC <mac>, DSTMAC <mac> |
Override outer Ethernet source or destination MAC (00:1a:2b:3c:4d:5e, 00-1A-2B-3C-4D-5E, or 001a.2b3c.4d5e) |
ETHERTYPE <u16> |
Override outer Ethernet Type field (e.g. 0x8100, 0x8847, 0x88cc) |
|
VLAN <1..4094> [PCP <0..7>] [DEI <0..1>] |
Add IEEE 802.1Q VLAN tag, 802.1p priority (PCP), and drop eligible bit (DEI) |
|
QINQ <1..4094> [INNER_VLAN <1..4094>] |
Add IEEE 802.1ad outer service tag (S-VLAN) + inner customer tag (C-VLAN) |
|
MPLS <label> [EXP <0..7>] [BOS <0..1>] [MPLS_TTL <u8>] |
Add MPLS shim header (0x8847) with 20-bit label, Traffic Class (EXP), BOS, and TTL |
|
| Layer 3 | TTL <0..255> |
Set IPv4 Time-To-Live or IPv6 Hop Limit |
DSCP <0..63>, ECN <0..3> |
Set DiffServ QoS Code Point (e.g. 46 for voice EF) and ECN congestion bits |
|
FLOWLABEL <0..1048575> |
Set 20-bit IPv6 Flow Label (automatically ignored when the flow runs over IPv4) | |
IPID <u16>, DF, MF, FRAGOFFSET <u16> |
Set IPv4 Identification, Don't Fragment, More Fragments, and 8-byte fragment offset | |
| Layer 4 | SRCPORT <u16>, DSTPORT <u16> |
Override TCP, UDP, or SCTP source and destination port numbers |
TRANSPORT TCP | UDP |
Select TCP or UDP for dual-transport protocols (DNS, SIP, NFS, SYSLOG) |
|
SEQ <u32>, ACKNUM <u32>, WIN <u16> |
Override TCP sequence number, acknowledgment number, and window size | |
MSS <u16>, WSCALE <u8>, SACK_PERM |
Add TCP Maximum Segment Size, Window Scale, and SACK Permitted options | |
TSVAL <u32>, TSECR <u32>, URGENT <u16> |
Add RFC 7323 TCP Timestamp (TSval/TSecr) options and Urgent Pointer |
|
| Payload | PAYLOAD "<string>" |
Append ASCII/UTF-8 payload text (supports \r, \n, \t, \xHH escapes) |
HEXPAYLOAD "<hex>" |
Append raw hexadecimal bytes (e.g. "deadbeef") |
|
| Timing | WAIT <duration> |
Advance .pcap timestamp after emitting the packet (ns, us, ms, s, m) |
Supported Protocols & Default Wire Behavior
Every protocol works out of the box with standard RFC defaults when optional fields are omitted:
| Protocol | Layer | Transport | Default Port | Default Wire Behavior |
|---|---|---|---|---|
ARP |
L2 | Ethernet (0x0806) |
N/A | Request, Hardware 1 (Ethernet), Protocol 0x0800 (IPv4); uses ICMPv6 Neighbor Solicitation on IPv6. |
VLAN |
L2 | Ethernet (0x8100) |
N/A | IEEE 802.1Q tag, default VLAN ID 100, PCP 0, DEI 0. |
QINQ |
L2 | Ethernet (0x88A8) |
N/A | IEEE 802.1ad outer tag (VLAN 100) + 802.1Q inner tag (VLAN 200). |
LLDP |
L2 | Ethernet (0x88CC) |
N/A | Multicast 01:80:c2:00:00:0e, Chassis ID & Port ID TLVs, TTL 120s, End TLV. |
STP |
L2 | LLC/SNAP (0x4242) |
N/A | Multicast 01:80:c2:00:00:00, Configuration BPDU, Root ID, Bridge ID, Cost 0. |
LACP |
L2 | Ethernet (0x8809) |
N/A | Multicast 01:80:c2:00:00:02, Actor Info & Partner Info TLVs, Collector TLV. |
EAPOL |
L2 | Ethernet (0x888E) |
N/A | IEEE 802.1X Version 1, EAP-Packet Identity request/response. |
MPLS |
L2.5 | Ethernet (0x8847) |
N/A | Label 16, EXP 0, BOS 1, TTL 64 unicast shim header. |
ICMP |
L3 | IP proto 1 / 58 |
N/A | Echo Request (Type 8 for IPv4, Type 128 for IPv6), ID 1, Seq 1. |
NDP |
L3 | IPv6 ICMPv6 (58) |
N/A | Neighbor Solicitation (Type 135), Hop Limit 255. |
IGMP |
L3 | IPv4 proto 2 |
N/A | Membership Query to 224.0.0.1 (All Hosts), Max Resp Time 10.0s. |
MLD |
L3 | IPv6 ICMPv6 (58) |
N/A | Multicast Listener Query (Type 130) to ff02::1. |
GRE |
L3 | IP proto 47 |
N/A | GRE Version 0, Protocol Type 0x0800 (IPv4) / 0x86DD (IPv6). |
VXLAN |
L3 | UDP | 4789 |
Flags 0x08 (I flag), 24-bit VNI 1000, 8-byte VXLAN header + inner frame. |
GENEVE |
L3 | UDP | 6081 |
Version 0, 24-bit VNI 1000, Protocol Type 0x6558 (Ethernet). |
IPSEC |
L3 | IP proto 50 |
N/A | SPI 0x1000, Sequence 1, default ESP wire header. |
ESP |
L3 | IP proto 50 |
N/A | Encapsulating Security Payload, SPI 0x1000, Sequence 1. |
AH |
L3 | IP proto 51 |
N/A | Authentication Header, SPI 0x1000, Sequence 1, 96-bit ICV. |
IKEV2 |
L3 | UDP | 500 |
SA_INIT exchange (Type 34), Initiator SPI set, Responder SPI 0. |
WIREGUARD |
L3 | UDP | 51820 |
Handshake Initiation message (Type 1), Sender index 1. |
OSPF |
L3 | IP proto 89 |
N/A | OSPFv2 (IPv4) or OSPFv3 (IPv6) Hello packet, Area 0.0.0.0, to 224.0.0.5 / ff02::5. |
BGP |
L3 | TCP | 179 |
BGP-4 16-byte marker, OPEN message, ASN 65001, Hold Time 180s. |
RIP |
L3 | UDP | 520 |
RIPv2 Response (Command 2), Version 2, Route AFI 2 (IP), Metric 1. |
VRRP |
L3 | IP proto 112 |
N/A | VRRPv3 Advertisement, VRID 1, Priority 100, TTL 255. |
HSRP |
L3 | UDP | 1985 |
Cisco HSRP Hello, State Active, Group 1 to 224.0.0.2. |
PIM |
L3 | IP proto 103 |
N/A | PIM-SM Hello message, DR Priority 1 to 224.0.0.13 / ff02::d. |
BFD |
L3 | UDP | 3784 |
Single-hop Control packet, State Up, Detect Mult 3, Min TX/RX 1000ms. |
OPENFLOW |
L3 | TCP | 6653 |
OpenFlow 1.3 (0x04) Hello / Features Request, XID 1. |
TCP |
L4 | IP proto 6 |
80 |
Sequence numbers auto-incremented, ACK numbers tracked across reverse arrows. |
UDP |
L4 | IP proto 17 |
80 |
Stateless UDP datagram with computed RFC 768 checksum. |
SCTP |
L4 | IP proto 132 |
80 |
Verification Tag 0, DATA chunk, TSN 1, Stream 0, CRC32c checksum. |
SNMP1 |
L7 | UDP | 162 / 161 |
Community "public", sysUpTime 0, Trap/Poll PDU, RFC 1157 BER encoding. |
SNMP2 |
L7 | UDP | 162 / 161 |
Community "public", sysUpTime 0, Trap/Poll PDU, RFC 3416 BER encoding. |
SNMP3 |
L7 | UDP | 161 / 162 |
USM security model, RFC 3414 / 3826 / 7860 authentication & privacy engine. |
DNS |
L7 | UDP / TCP | 53 |
Standard Query, TXID 0x1234, QNAME "example.com", QTYPE A / AAAA. |
MDNS |
L7 | UDP | 5353 |
Multicast DNS Query (TXID 0) to 224.0.0.251 / ff02::fb. |
DHCP |
L7 | UDP | 67/68 (546/547 v6) |
DHCPDISCOVER (IPv4) or Solicit (IPv6) with client MAC. |
NTP |
L7 | UDP | 123 |
Mode 3 (Client), Version 4, Stratum 0, Poll 4. |
PTP |
L7 | UDP | 319 / 320 |
IEEE 1588-2008 Version 2 Sync message, Domain 0. |
RADIUS |
L7 | UDP | 1812 / 1813 |
Access-Request (Code 1, port 1812; Accounting on 1813), Identifier 1. |
TACACS |
L7 | TCP | 49 |
TACACS+ Authentication Start, Session ID 0x12345678. |
SYSLOG |
L7 | UDP / TCP | 514 |
RFC 5424 PRI <14> (Facility 1 User, Severity 6 Info), APP "frameassembly". |
NETFLOW |
L7 | UDP | 2055 |
Cisco NetFlow v5 Flow Record export packet. |
IPFIX |
L7 | UDP | 4739 |
RFC 7011 IPFIX Observation Domain & Data Record packet. |
SFLOW |
L7 | UDP | 6343 |
sFlow v5 Flow Sample datagram. |
TFTP |
L7 | UDP | 69 |
Read Request (RRQ), Filename "file.bin", Mode "octet". |
FTP |
L7 | TCP | 21 |
Greeting banner "220 FTP Server Ready\r\n" or control command. |
SSH |
L7 | TCP | 22 |
Identification banner "SSH-2.0-FrameAssembly_1.0\r\n". |
TELNET |
L7 | TCP | 23 |
IAC WILL/DO negotiation bytes (\xff\xfb...). |
HTTP |
L7 | TCP | 80 |
GET / HTTP/1.1\r\nHost: <host>\r\n\r\n. |
HTTP2 |
L7 | TCP | 443 |
24-byte client connection preface (PRI * HTTP/2.0...) + SETTINGS frame. |
GRPC |
L7 | TCP | 50051 |
Length-prefixed gRPC frame over HTTP/2 (application/grpc). |
WEBSOCKET |
L7 | TCP | 80 |
RFC 6455 WebSocket frame with optional client masking. |
TLS |
L7 | TCP | 443 |
TLS 1.3 ClientHello with SNI and supported_versions extensions. |
QUIC |
L7 | UDP | 443 |
QUIC v1 Initial packet or 1-RTT Short packet. |
STUN |
L7 | UDP | 3478 |
Binding Request, RFC 8489 Magic Cookie 0x2112A442. |
SIP |
L7 | UDP / TCP | 5060 |
INVITE sip:bob@domain SIP/2.0\r\n.... |
RTP |
L7 | UDP | 5004 |
RTP Version 2, Payload Type 0 (PCMU), Seq 1, Timestamp 0. |
RTSP |
L7 | TCP | 554 |
DESCRIBE rtsp://server/media RTSP/1.0\r\n.... |
SMTP |
L7 | TCP | 25 |
EHLO mail.example.com\r\n. |
IMAP |
L7 | TCP | 143 |
A001 CAPABILITY\r\n. |
POP3 |
L7 | TCP | 110 |
+OK POP3 server ready\r\n or USER/PASS command. |
KERBEROS |
L7 | UDP / TCP | 88 |
Kerberos v5 AS-REQ for krbtgt ticket. |
LDAP |
L7 | TCP | 389 |
LDAPv3 BindRequest (Simple) or SearchRequest message. |
SMB |
L7 | TCP | 445 |
SMB2/3 Negotiate Protocol Request. |
NFS |
L7 | TCP / UDP | 2049 |
ONC-RPC NFSv4 NULL / COMPOUND call. |
REDIS |
L7 | TCP | 6379 |
RESP command *1\r\n$4\r\nPING\r\n. |
MEMCACHED |
L7 | TCP / UDP | 11211 |
Text command version\r\n or Binary 0x80 packet. |
MYSQL |
L7 | TCP | 3306 |
Initial Handshake Packet v10 or COM_QUERY. |
POSTGRES |
L7 | TCP | 5432 |
StartupMessage v3.0 or Simple Query ('Q'). |
MQTT |
L7 | TCP | 1883 |
MQTT v3.1.1 CONNECT packet, Clean Session. |
COAP |
L7 | UDP | 5683 |
Confirmable (CON) GET, Code 0.01, Msg ID 1. |
AMQP |
L7 | TCP | 5672 |
8-byte protocol header 'AMQP\x00\x00\x09\x01'. |
SSDP |
L7 | UDP | 1900 |
Multicast M-SEARCH * HTTP/1.1\r\nHOST: 239.255.255.250:1900\r\n.... |
WHOIS |
L7 | TCP | 43 |
Query string "example.com\r\n". |
MODBUS |
L7 | TCP | 502 |
7-byte MBAP header + Function 3 (Read Holding Registers). |
BACNET |
L7 | UDP | 47808 |
BVLC 0x81 + APDU Unconfirmed WHO-IS or READ-PROPERTY. |
DNP3 |
L7 | TCP / UDP | 20000 |
IEEE 1815 0x0564 Data Link Header + Function 1 (Read) + CRC-16. |
S7COMM |
L7 | TCP | 102 |
TPKT + ISO-on-TCP COTP + S7 0x32 Setup/Read/Write Job. |
ETHERNETIP |
L7 | TCP / UDP | 44818 |
Encapsulation Command 0x0065 (Register Session) or CIP Data. |
OPCUA |
L7 | TCP | 4840 |
Hello message HEL (Chunk 'F') with endpoint URL. |
Exhaustive Protocol & Sub-Keyword Reference (All 81 Protocols)
1. Layer 2 Switching & Data-Link Protocols (8 Protocols — docs/l2_protocols.md)
- examples/l2/arp/ —
ARP(RFC 826 / RFC 5227):REQUEST,REPLY,GRATUITOUS/GARP,SHA <mac>/SENDERMAC <mac>,SPA <ip>/SENDERIP <ip>,THA <mac>/TARGETMAC <mac>,TPA <ip>/TARGETIP <ip>. - examples/l2/vlan/ —
VLAN(IEEE 802.1Q):VLAN <1..4094>,PCP <0..7>,DEI <0..1>. - examples/l2/qinq/ —
QINQ(IEEE 802.1ad Provider Bridging):QINQ <1..4094>,INNER_VLAN <1..4094>,PCP <0..7>,DEI <0..1>. - examples/l2/lldp/ —
LLDP(IEEE 802.1AB):CHASSIS_ID "<str>",PORT_ID "<str>",TTL <u16>,SYSNAME "<str>",SYSDESC "<str>". - examples/l2/stp/ —
STP(IEEE 802.1D / 802.1w RSTP):RSTP,ROOT_ID "<prio>/<mac>"/ROOTID "<str>",BRIDGE_ID "<prio>/<mac>"/BRIDGEID "<str>",COST <u32>,PORT_ID <u16>,MAX_AGE <u16>,HELLO_TIME <u16>,FORWARD_DELAY <u16>,FLAGS <u8>. - examples/l2/lacp/ —
LACP(IEEE 802.3ad):ACTOR_SYS <mac>,ACTOR_KEY <u16>,ACTOR_PORT <u16>,ACTOR_STATE <u8>,PARTNER_SYS <mac>,PARTNER_KEY <u16>,PARTNER_PORT <u16>,PARTNER_STATE <u8>. - examples/l2/eapol/ —
EAPOL(IEEE 802.1X NAC):VERSION <u8>,TYPE <START|LOGOFF|KEY|EAP_PACKET>,EAP_CODE <u8>,EAP_ID <u8>,EAP_METHOD <u8>,IDENTITY "<str>". - examples/l2/mpls/ —
MPLS(RFC 3032):MPLS <label>/LABEL <u32>,EXP <0..7>/TC <0..7>,BOS <0..1>,MPLS_TTL <u8>.
2. Layer 3 Control, Tunneling, VPN & Routing Protocols (20 Protocols — docs/l3_protocols.md)
- examples/l3/icmp/ —
ICMP(RFC 792 / RFC 4443 Dual-Stack):ECHO_REQUEST,ECHO_REPLY,DEST_UNREACH,TIME_EXCEEDED,REDIRECT,TYPE <u8>,CODE <u8>,ID <u16>,SEQ <u16>,GATEWAY <ip>. - examples/l3/ndp/ —
NDP(RFC 4861 IPv6 Neighbor Discovery):ROUTER_SOLICIT,ROUTER_ADVERT,NEIGHBOR_SOLICIT,NEIGHBOR_ADVERT,REDIRECT,TARGET <ipv6>,SLLA <mac>,TLLA <mac>,ROUTER_LIFETIME <u16>. - examples/l3/igmp/ —
IGMP(RFC 2236 / RFC 3376):QUERY,REPORT,LEAVE,V1,V2,V3,VERSION <1..3>,GROUP <ipv4>,MAX_RESP <u8>. - examples/l3/mld/ —
MLD(RFC 2710 / RFC 3810 IPv6 Multicast):QUERY,REPORT,DONE,MULTICAST_ADDR <ipv6>,MAX_RESP_DELAY <u16>. - examples/l3/gre/ —
GRE(RFC 2784 / RFC 2890):CHECKSUM,GRE_KEY <u32>,GRE_SEQ <u32>,GRE_PROTO <u16>. - examples/l3/vxlan/ —
VXLAN(RFC 7348):VNI <0..16777215>/VNID <u32>,SRCPORT <u16>,DSTPORT <u16>. - examples/l3/geneve/ —
GENEVE(RFC 8926):VNI <0..16777215>/VNID <u32>,PROTOCOL_TYPE <u16>,OPT_CLASS <u16>,OPT_TYPE <u8>. - examples/l3/ipsec/ —
IPSEC(RFC 4301):SPI <u32>,SEQ <u32>,IV "<hex>",ICV "<hex>",NEXT_HEADER <u8>. - examples/l3/esp/ —
ESP(RFC 4303):SPI <u32>,SEQ <u32>,IV "<hex>",ICV "<hex>",NEXT_HEADER <u8>. - examples/l3/ah/ —
AH(RFC 4302):SPI <u32>,SEQ <u32>,ICV "<hex>",NEXT_HEADER <u8>. - examples/l3/ikev2/ —
IKEV2(RFC 7296):SA_INIT,CREATE_CHILD_SA,INFORMATIONAL,EXCHANGE <mode>,INITIATOR_SPI <u64>,RESPONDER_SPI <u64>,MSGID <u32>,FLAGS <u8>,NEXT_PAYLOAD <u8>. - examples/l3/wireguard/ —
WIREGUARD(WireGuard VPN):TYPE <INITIATION|RESPONSE|COOKIE|DATA>(or bareINITIATION,COOKIE,DATA),SENDER <u32>,RECEIVER <u32>,COUNTER <u64>. - examples/l3/ospf/ —
OSPF(RFC 2328 OSPFv2 / RFC 5340 OSPFv3):HELLO,DBD,LSR,LSU,LSACK,ROUTER_ID <ipv4>,AREA_ID <u32>,HELLO_INTERVAL <u16>,DEAD_INTERVAL <u32>,PRIORITY <u8>. - examples/l3/bgp/ —
BGP(RFC 4271 / RFC 2545 BGP-4):OPEN,UPDATE,NOTIFICATION,KEEPALIVE,ASN <u32>,HOLDTIME <u16>,BGPID <ipv4>,PREFIX "<cidr>",NEXTHOP <ip>. - examples/l3/rip/ —
RIP(RFC 2453 RIPv2 / RFC 2080 RIPng):REQUEST,RESPONSE,PREFIX <ip>,NEXTHOP <ip>,METRIC <1..16>,TAG <u16>. - examples/l3/vrrp/ —
VRRP(RFC 5798 VRRPv3 / RFC 3768 VRRPv2):VERSION <2|3>,VRID <1..255>,PRIORITY <0..255>,ADV_INT <u16>,VIP <ip>. - examples/l3/hsrp/ —
HSRP(RFC 2281):GROUP <u8>,PRIORITY <u8>,STATE <u8>,HELLOTIME <u8>,HOLDTIME <u16>,AUTH "<str>",VIP <ip>. - examples/l3/pim/ —
PIM(RFC 7761 PIM-SM):HELLO,JOIN_PRUNE,REGISTER,DR_PRIORITY <u32>,HOLDTIME <u16>,SOURCE <ip>,GROUP <ip>,RP <ip>. - examples/l3/bfd/ —
BFD(RFC 5880 / RFC 5881):STATE <0..3>,DIAG <0..31>,MY_DISC <u32>,YOUR_DISC <u32>,MIN_TX <u32>,MIN_RX <u32>,MULT <u8>. - examples/l3/openflow/ —
OPENFLOW(OpenFlow 1.3):HELLO,FEATURES_REQ,FEATURES_REPLY,PACKET_IN,PACKET_OUT,FLOW_MOD,ECHO_REQ,ECHO_REPLY,VERSION <u8>,XID <u32>,DPID <u64>,TABLE_ID <u8>,PRIORITY <u16>.
3. Layer 4 Transport Protocols (3 Protocols — docs/l4_transports.md)
- examples/l4/tcp/ —
TCP(RFC 9293 / RFC 7323):SYN,ACK,FIN,RST,PSH,URG,ECE,CWR,SRCPORT <u16>,DSTPORT <u16>,SEQ <u32>,ACKNUM <u32>,WIN <u16>/WINDOW <u16>,MSS <u16>,WSCALE <u8>,SACK_PERM,TSVAL <u32>,TSECR <u32>,URGENT <u16>. - examples/l4/udp/ —
UDP(RFC 768):SRCPORT <u16>,DSTPORT <u16>,PAYLOAD "<str>",HEXPAYLOAD "<hex>". - examples/l4/sctp/ —
SCTP(RFC 9260):CHUNK <DATA|INIT|INIT_ACK|SACK|HEARTBEAT|HEARTBEAT_ACK|ABORT|SHUTDOWN|COOKIE_ECHO|COOKIE_ACK>,VTAG <u32>,TSN <u32>/SEQ <u32>,STREAM <u16>,SSN <u16>,PPID <u32>.
4. Layer 7 SNMP Protocols (3 Protocols — docs/l7_snmp.md)
- examples/l7/snmp/snmpv1/ —
SNMP1(RFC 1157 SMIv1 BER):TRAP,GET,GETNEXT,SET,RESPONSE,COMMUNITY "<str>",REQID <u32>,OID <oid>,SYSUPTIME <u32>,ENTERPRISE <oid>,AGENTIP <ipv4>,GENTRAP <0..6>,SPECTRAP <u32>,VARBIND. - examples/l7/snmp/snmpv2c/ —
SNMP2(RFC 3416 SMIv2 BER):TRAP,INFORM,GET,GETNEXT,GETBULK,SET,RESPONSE,COMMUNITY "<str>",REQID <u32>,NONREPEATERS <u32>,MAXREPETITIONS <u32>,SYSUPTIME <u32>,OID <oid>,VARBIND. - examples/l7/snmp/snmpv3/ —
SNMP3(RFC 3414 / 3826 / 7860 USM):TRAP,INFORM,GET,GETNEXT,GETBULK,SET,RESPONSE,USER "<str>",ENGINEID "<hex>",ENGINEBOOTS <u32>,ENGINETIME <u32>,CONTEXTNAME "<str>",AUTH <MD5|SHA|SHA256|SHA384|SHA512> "<pass>",PRIV <DES|AES> "<pass>",REQID <u32>,NONREPEATERS <u32>,MAXREPETITIONS <u32>,SYSUPTIME <u32>,OID <oid>,VARBIND.- All 9 SMI
VARBIND <oid> <TYPE> [value]Types:NULL/NULLVAL,STRING "<text>",INT <i32>,TIMETICKS <u32>,IPVAL <ip>,OIDVAL <oid>,COUNTER32 <u32>,GAUGE32 <u32>,COUNTER64 <u64>.
- All 9 SMI
5. Layer 7 Infrastructure, Time, AAA & Flow Telemetry Protocols (11 Protocols — docs/l7_infra_and_telemetry.md)
- examples/l7/dns/ —
DNS(RFC 1035):QUERY,RESPONSE,TXID <u16>,QNAME "<domain>",QTYPE "<type>",RDATA "<str>",RCODE <u8>,ANS_TTL <u32>,TRANSPORT TCP. - examples/l7/mdns/ —
MDNS(RFC 6762):QUERY,RESPONSE,TXID <u16>,QNAME "<name>",QTYPE "<type>",RDATA "<str>",RCODE <u8>,ANS_TTL <u32>. - examples/l7/dhcp/ —
DHCP(RFC 2131 / RFC 8415 DHCPv6):DISCOVER,OFFER,REQUEST,ACK,RELEASE,SOLICIT,ADVERTISE,REPLY,XID <u32>/TXID <u32>,CIADDR <ip>,YIADDR <ip>,SIADDR <ip>,CHADDR <mac>,HOSTNAME "<str>",DNS_SERVER <ip>,ROUTER <ip>,SUBNET_MASK <ip>,LEASE_TIME <u32>. - examples/l7/ntp/ —
NTP(RFC 5905):LI <0..3>,VN <1..4>,MODE <1..7>,STRATUM <0..16>,POLL <u8>,PRECISION <i8>,REFID "<str>",TX_TIMESTAMP <u64>. - examples/l7/ptp/ —
PTP(IEEE 1588-2008):SYNC,DELAY_REQ,FOLLOW_UP,DELAY_RESP,ANNOUNCE,MSG_TYPE "<type>",VERSION <u8>,DOMAIN <u8>,SEQ_ID <u16>,CLOCK_ID "<eui64>". - examples/l7/radius/ —
RADIUS(RFC 2865 / RFC 2866):ACCESS_REQUEST,ACCESS_ACCEPT,ACCESS_REJECT,ACCESS_CHALLENGE,ACCOUNTING_REQUEST,ACCOUNTING_RESPONSE,CODE "<type>",ID <u8>,USER "<str>",NAS_IP <ip>,SERVICE_TYPE <u32>,FRAMED_IP <ip>. - examples/l7/tacacs/ —
TACACS(RFC 8907 TACACS+):AUTHEN,AUTHOR,ACCT,TYPE <AUTHEN|AUTHOR|ACCT>,SEQ <u8>,FLAGS <u8>,SESSION_ID <u32>,USER "<str>",PAYLOAD "<str>". - examples/l7/syslog/ —
SYSLOG(RFC 5424):FACILITY <0..23>,SEVERITY <0..7>,PRI <0..191>,HOSTNAME "<str>",APP "<str>",PROCID "<str>",MSGID "<str>",MSG "<text>",TRANSPORT TCP. - examples/l7/netflow/ —
NETFLOW(Cisco NetFlow v5):SRCIP <ip>,DSTIP <ip>,SRCPORT <u16>,DSTPORT <u16>,PROTO <u8>,PACKETS <u32>,OCTETS <u32>. - examples/l7/ipfix/ —
IPFIX(RFC 7011):DOMAIN_ID <u32>,SRCIP <ip>,DSTIP <ip>,SRCPORT <u16>,DSTPORT <u16>,PROTO <u8>,PACKETS <u32>,OCTETS <u32>. - examples/l7/sflow/ —
SFLOW(sFlow v5):AGENT_IP <ip>,SUB_AGENT_ID <u32>,SEQ <u32>,UPTIME <u32>,SAMPLES <u32>.
6. Layer 7 Web, Cloud-Native, Transport Security, VoIP & Remote Access Protocols (16 Protocols — docs/l7_web_and_cloud.md)
- examples/l7/http/ —
HTTP(RFC 9112 HTTP/1.1):GET,POST,PUT,DELETE,HEAD,OPTIONS,PATCH,METHOD "<verb>",URI "<path>",VERSION "<ver>",HOST_HDR "<host>",USER_AGENT "<str>",CONTENT_TYPE "<mime>",STATUS <u16>,REASON "<str>",HEADER "<k>" "<v>",BODY "<str>". - examples/l7/http2/ —
HTTP2(RFC 9113):PREFACE,SETTINGS,HEADERS,DATA,WINDOW_UPDATE,PING,GOAWAY,STREAM_ID <u32>. - examples/l7/grpc/ —
GRPC(gRPC over HTTP/2):SERVICE "<str>",METHOD "<str>",GRPC_STATUS <u32>,PAYLOAD "<str>". - examples/l7/websocket/ —
WEBSOCKET(RFC 6455):OPCODE "<TEXT|BINARY|CLOSE|PING|PONG>"(or bareTEXT,BINARY,PING,PONG,CLOSE),FIN_BIT <0..1>,MASK_KEY <u32>,PAYLOAD "<str>". - examples/l7/tls/ —
TLS(RFC 8446 TLS 1.3):CLIENT_HELLO,SERVER_HELLO,CERTIFICATE,FINISHED,APP_DATA,ALERT,RECORD_VERSION <u16>,HANDSHAKE_VERSION <u16>,SNI "<str>",CIPHERSUITE <u16>,ALPN "<str>". - examples/l7/quic/ —
QUIC(RFC 9000):INITIAL,ZERO_RTT,HANDSHAKE,RETRY,SHORT,VERSION <u32>,DCID <u64>,SCID <u64>,TOKEN "<str>",PKT_NUM <u32>,PAYLOAD "<str>". - examples/l7/tftp/ —
TFTP(RFC 1350):RRQ,WRQ,DATA,ACK,ERROR,FILENAME "<str>",MODE "<str>",BLOCK <u16>,ERRCODE <u16>,ERRMSG "<str>". - examples/l7/ftp/ —
FTP(RFC 959):CMD "<str>",ARG "<str>",CODE <u16>,REPLY "<str>". - examples/l7/ssh/ —
SSH(RFC 4253):BANNER "<str>",KEXINIT,NEWKEYS,MSG_CODE <u8>,COOKIE "<str>",PAYLOAD "<str>". - examples/l7/telnet/ —
TELNET(RFC 854):WILL <u8>,WONT <u8>,DO <u8>,DONT <u8>,OPTION <u8>,DATA "<str>",PAYLOAD "<str>". - examples/l7/whois/ —
WHOIS(RFC 3912):QUERY,RESPONSE,DOMAIN "<str>",REGISTRAR "<str>". - examples/l7/sip/ —
SIP(RFC 3261):INVITE,BYE,CANCEL,METHOD "<verb>",URI "<str>",STATUS <u16>,REASON "<str>",FROM "<str>",TO "<str>",CALL_ID "<str>",CSEQ <u32>,VIA "<str>",CONTACT "<str>",CONTENT_TYPE "<str>",BODY "<sdp>",TRANSPORT TCP. - examples/l7/rtp/ —
RTP(RFC 3550):PT <u8>,SEQ <u16>,TIMESTAMP <u32>,SSRC <u32>,MARKER <0..1>,PAYLOAD "<str>". - examples/l7/rtsp/ —
RTSP(RFC 2326):OPTIONS,DESCRIBE,SETUP,PLAY,TEARDOWN,METHOD "<verb>",URI "<str>",STATUS <u16>,CSEQ <u32>,SESSION "<str>",TRANSPORT_HDR "<str>". - examples/l7/stun/ —
STUN(RFC 8489):BINDING_REQUEST,BINDING_RESPONSE,BINDING_ERROR,TXID <u32>,XOR_MAPPED_ADDR <ip>,SOFTWARE "<str>". - examples/l7/ssdp/ —
SSDP(UPnP Discovery):MSEARCH,NOTIFY,HOST_HDR "<str>",MAN "<str>",MX <u8>,ST "<str>",NT "<str>",NTS "<str>",USN "<str>",LOCATION "<str>".
7. Layer 7 Mail, Directory, Storage, Databases, Caches & Message Brokers (14 Protocols — docs/l7_mail_auth_storage_db.md)
- examples/l7/smtp/ —
SMTP(RFC 5321):EHLO "<domain>",HELO "<domain>",MAIL_FROM,RCPT_TO,DATA,QUIT,CMD "<str>",PARAM "<addr>",CODE <u16>,REPLY "<str>",BODY "<str>". - examples/l7/imap/ —
IMAP(RFC 3501):TAG "<str>",CMD "<str>",ARG "<str>",STATUS "<str>",RESPONSE "<str>". - examples/l7/pop3/ —
POP3(RFC 1939):CMD "<str>",ARG "<str>",OK,ERR,RESPONSE "<str>". - examples/l7/kerberos/ —
KERBEROS(RFC 4120):AS_REQ,AS_REP,TGS_REQ,TGS_REP,KRB_ERROR,REALM "<str>",CNAME "<str>",SNAME "<str>",ETYPE <i32>. - examples/l7/ldap/ —
LDAP(RFC 4511):BIND_REQ,BIND_RES,SEARCH_REQ,SEARCH_ENTRY,SEARCH_DONE,UNBIND_REQ,MSGID <i32>,BASE_DN "<str>",FILTER "<str>",RESULT_CODE <u32>. - examples/l7/smb/ —
SMB(MS-SMB2/3):COMMAND "<NEGOTIATE|SESSION_SETUP|TREE_CONNECT|CREATE|READ|WRITE|CLOSE|TREE_DISCONNECT|LOGOFF>",STATUS <u32>,SESSION_ID <u64>,TREE_ID <u32>,MSGID <u64>,SHARE "<str>",FILENAME "<str>". - examples/l7/nfs/ —
NFS(RFC 1813 / RFC 7530):VERS <u32>,PROC "<str>",TAG "<str>",PATH "<str>",XID <u32>. - examples/l7/redis/ —
REDIS(RESP Protocol):CMD "<str>",ARGS "<str>",REPLY_TYPE "<str>",VALUE "<str>". - examples/l7/memcached/ —
MEMCACHED:CMD "<str>",KEY "<str>",VALUE "<str>",FLAGS <u32>,EXPTIME <u32>,OPCODE <u8>,OPAQUE <u32>,CAS <u64>. - examples/l7/mysql/ —
MYSQL:GREETING,LOGIN,QUERY,OK,ERR,EOF,SERVER_VERSION "<str>",USER "<str>",DB "<str>",SQL "<query>",ERRCODE <u16>. - examples/l7/postgres/ —
POSTGRES(v3.0):STARTUP,QUERY,AUTH_OK,COMMAND_COMPLETE,READY_FOR_QUERY,ERROR_RESPONSE,USER "<str>",DB "<str>",SQL "<query>". - examples/l7/mqtt/ —
MQTT(v3.1.1 / v5.0):CONNECT,CONNACK,PUBLISH,PUBACK,SUBSCRIBE,SUBACK,PINGREQ,PINGRESP,DISCONNECT,CLIENT_ID "<str>",TOPIC "<str>",QOS <0..2>,RETAIN,PKT_ID <u16>,KEEPALIVE <u16>,RETURN_CODE <u8>. - examples/l7/coap/ —
COAP(RFC 7252):CON,NON,ACK,RST,CODE "<str>",MSGID <u16>,TOKEN <u32>,URI_PATH "<str>",CONTENT_FORMAT <u16>. - examples/l7/amqp/ —
AMQP(0-9-1 / 1.0):PROTOCOL_HEADER,CONNECTION_START,CHANNEL_OPEN,BASIC_PUBLISH,BASIC_DELIVER,HEARTBEAT,CHANNEL <u16>,EXCHANGE "<str>",ROUTING_KEY "<str>".
8. Layer 7 Industrial Control Systems (ICS) & SCADA/OT Protocols (6 Protocols — docs/l7_industrial_ot.md)
- examples/l7/modbus/ —
MODBUS(Modbus TCP):FUNC "<name>"(orREAD_COILS,READ_DISCRETE_INPUTS,READ_HOLDING_REGISTERS,READ_INPUT_REGISTERS,WRITE_SINGLE_COIL,WRITE_SINGLE_REGISTER,WRITE_MULTIPLE_REGISTERS),TXID <u16>,PROTO_ID <u16>,UNITID <u8>,ADDR <u16>,COUNT <u16>,VALUE <u16>,IS_RESPONSE. - examples/l7/bacnet/ —
BACNET(ASHRAE 135 BACnet/IP):WHO_IS,I_AM,READ_PROPERTY,WRITE_PROPERTY,INVOKE_ID <u8>,OBJECT_TYPE <u16>,OBJECT_INSTANCE <u32>,PROPERTY_ID <u32>,VALUE <u32>. - examples/l7/dnp3/ —
DNP3(IEEE 1815):FUNC "<name>"(orCONFIRM,READ,WRITE,SELECT,OPERATE,DIRECT_OPERATE,UNSOLICITED_RESPONSE),SRC <u16>,DST <u16>,SEQ <u8>,GROUP <u8>,VARIATION <u8>,CRC <u16>. - examples/l7/s7comm/ —
S7COMM(Siemens S7 PLC):ROSCTR "<JOB|ACK|ACK_DATA|USERDATA>",FUNC "<SETUP_COMM|READ_VAR|WRITE_VAR|PLC_CONTROL>",PDU_REF <u16>,AREA <u8>,DB_NUM <u16>,OFFSET <u32>,COUNT <u16>. - examples/l7/ethernetip/ —
ETHERNETIP(ODVA EtherNet/IP & CIP):CMD "<name>"(orLIST_SERVICES,LIST_IDENTITY,LIST_INTERFACES,REGISTER_SESSION,UNREGISTER_SESSION,SEND_RR_DATA,SEND_UNIT_DATA),SESSION_HANDLE <u32>,STATUS <u32>,CONTEXT <u64>,CIP_SERVICE <u8>,CIP_CLASS <u16>,CIP_INSTANCE <u16>,CIP_ATTR <u16>. - examples/l7/opcua/ —
OPCUA(IEC 62541):MSG_TYPE "<HEL|ACK|ERR|OPN|CLO|MSG>",CHUNK_TYPE "<F|C|A>",SECURE_CHANNEL_ID <u32>,TOKEN_ID <u32>,SEQ_NUM <u32>,REQID <u32>,ENDPOINT_URL "<str>",NODE_ID "<str>".
Documentation
Tutorials & Practical Cookbooks
- Getting Started Guide — Step-by-step introduction for network technicians with zero programming background: anatomy of a
.fasmfile, colon/hyphen/Cisco dotted-quad MAC support,frameassembly showterminal preview, Wireshark/tcpdump-to-.fasmtranslation table, generating.fasmwith ChatGPT/Claude/Copilot, and pairingframeassemblywithWireshark,tshark, andtcpreplay. - Practical Use Cases & Recipes — Symptom-based quick-jump index and ready-to-copy
.fasmrecipes for simulating SNMPv1/v2c/v3 traps & polls, testing firewall rules and ACLs, verifying VLAN/QinQ trunks and DiffServ QoS, testing IDS/IPS & flow collectors, validating industrial OT dissectors, and sharing zero-noise captures.
Protocol & Topology Reference Guides
- Layer 2 Switching & Data-Link Protocols —
ARP,VLAN(802.1Q),QINQ(802.1ad),LLDP,STP/RSTP,LACP,EAPOL(802.1X), andMPLS(8protocols). - Layer 3 Control, Tunneling, VPN & Routing Protocols —
ICMP,NDP,IGMP,MLD,GRE,VXLAN,GENEVE,IPSEC,ESP,AH,IKEV2,WIREGUARD,OSPF,BGP,RIP,VRRP,HSRP,PIM,BFD, andOPENFLOW(20protocols). - Layer 4 Transport Protocols —
TCP,UDP, andSCTP, including automatic 4-tupleSEQ/ACKand reply-port tracking, RFC 7323 TCP options, and SCTP multi-chunk signaling (3protocols). - Layer 7 SNMPv1, SNMPv2c & Encrypted SNMPv3 Guide — Network administrator's guide to
SNMP1,SNMP2, andSNMP3USM authentication (MD5/SHA/SHA256/SHA384/SHA512), encryption (DES/AES), and all 9VARBINDdata types (3protocols). - Layer 7 Infrastructure, Time, AAA & Flow Telemetry —
DNS,MDNS,DHCP/DHCPv6,NTP,PTP,RADIUS,TACACS,SYSLOG,NETFLOW,IPFIX, andSFLOW(11protocols). - Layer 7 Web, Cloud-Native, Transport Security, VoIP & Remote Access —
HTTP,HTTP2,GRPC,WEBSOCKET,TLS,QUIC,TFTP,FTP,SSH,TELNET,WHOIS,SIP,RTP,RTSP,STUN, andSSDP(16protocols). - Layer 7 Mail, Directory, Storage, Databases, Caches & Message Brokers —
SMTP,IMAP,POP3,KERBEROS,LDAP,SMB,NFS,REDIS,MEMCACHED,MYSQL,POSTGRES,MQTT,COAP, andAMQP(14protocols). - Layer 7 Industrial Control Systems (ICS) & SCADA/OT —
MODBUS,BACNET,DNP3,S7COMM,ETHERNETIP, andOPCUA(6protocols). - Multi-Protocol Network Topologies & Dual-Stack Scenarios — Multi-host enterprise, data center EVPN-VXLAN, campus 802.1X NAC, and industrial OT topologies (plus
examples/with2,611verified.fasmscenarios across all 81 protocols).
For Systems Engineers & Developers
- For Nerds: Architecture, Rust Library API & Formal Grammars — Six-stage Rust pipeline, embedding
frameassemblyas a Rust library (parse_program,compile_program,generate_pcap), formal grammars (grammar.ebnf,frameassembly.gbnf,frameassembly.lark), constrained LLM decoding, andexamples/SFT/RLVR corpus conventions.
License
This project is licensed under the MIT License. See LICENSE for details.