Skip to content

tcp

The tcp identity: raw bytes over a TCP connection. Every directive and what is required.

tcp speaks raw bytes over a TCP connection. The session persists across steps, so a solution can stage an exchange in one step and continue it in the next. The target is host:port. Send and receive raw bytes as hex; a send may also be written as readable text with send hex of "<text>".

Write it in English

A tcp step reads as sentences: send hex "<hex>" sends bytes, receive <n> bytes reads at most that many, receive until "<hex>" stops at a marker, port <n> reconnects to another port, timeout <n> seconds bounds the wait, close the connection ends the session, and expect ... checks the hex response:

tcp negotiate
  send hex "010203..."
  receive 4096 bytes
  timeout 5 seconds
  expect "..." in the response

send hex of "<text>" hex-encodes readable text with the usual escapes.

The directives

send

send hex "<hex>" is the bytes to send, written as hex, or send hex of "<text>" for readable text: the quoted text, with the \r, \n, \t, \", \\, and \xHH escapes, is hex-encoded for you, so send hex of "HELO x\r\n" is the same bytes as 48454c4f20780d0a. It may be omitted when a step only reads, for example a banner grab.

receive

receive <n> bytes reads at most that many.

receive until

receive until "<hex>" stops the read once this hex marker appears.

timeout

timeout <n> seconds bounds the wait. Example: timeout 5 seconds.

close

close the connection ends the session after this step.

capture

capture pulls a value out of the received hex for later steps, and it reads as English. The value after shape captures the run of hex after a hex marker and hex-decodes it, the way a server-assigned port id rides in the stream:

tcp negotiate
  send hex "010203..."
  capture the value after "6f703a6f747270633a" as port_id
  expect "..." in the response

Later steps reference {port_id}. The regex form is still available: the pattern runs over the hex and group 1 is hex-decoded before storing (capture port: "(....)").

Example

tcp banner
  # read the service banner
  receive 4096 bytes
  timeout 5 seconds
  expect the response to match "..."

The step sends nothing; it only reads, so there is no send hex line.

Give exploit research a common language.

Bring a PoC, a writeup, or an AI-generated draft into an Exploitmatic solution: inspect it, validate it, and replay it against a target you own. The runtime and the corpus are open source.