Documentation
¶
Overview ¶
Package layers
Index ¶
- Constants
- Variables
- func CalculateIPv4Checksum(data []byte) (uint16, error)
- func CalculateUDPChecksum(data []byte) (uint16, error)
- func GenerateRandomBytes(n int) ([]byte, error)
- func GenerateRandomUint16BE() (uint16, error)
- func GenerateRandomUint16LE() (uint16, error)
- func GenerateRandomUint16NE() (uint16, error)
- func MustGenerateRandomUint16NE() uint16
- type ARPOperation
- type ARPPacket
- func (ap *ARPPacket) MarshalBinary() ([]byte, error)
- func (ap *ARPPacket) Name() LayerName
- func (ap *ARPPacket) NextLayer() Layer
- func (ap *ARPPacket) Parse(data []byte) error
- func (ap *ARPPacket) String() string
- func (ap *ARPPacket) Summary() string
- func (ap *ARPPacket) ToBytes() []byte
- func (ap *ARPPacket) UnmarshalBinary(data []byte) error
- type CipherSuite
- type DNSFlags
- type DNSMessage
- func (d *DNSMessage) MarshalJSON() ([]byte, error)
- func (d *DNSMessage) Name() LayerName
- func (d *DNSMessage) NextLayer() Layer
- func (d *DNSMessage) Parse(data []byte) error
- func (d *DNSMessage) String() string
- func (d *DNSMessage) Summary() string
- func (d *DNSMessage) UnmarshalBinary(data []byte) error
- type EtherType
- type EthernetFrame
- func (ef *EthernetFrame) MarshalBinary() ([]byte, error)
- func (ef *EthernetFrame) Name() LayerName
- func (ef *EthernetFrame) NextLayer() Layer
- func (ef *EthernetFrame) Parse(data []byte) error
- func (ef *EthernetFrame) String() string
- func (ef *EthernetFrame) Summary() string
- func (ef *EthernetFrame) ToBytes() []byte
- func (ef *EthernetFrame) UnmarshalBinary(data []byte) error
- type EthernetType
- type Extension
- type FTPMessage
- type HSTLSParser
- type HTTPMessage
- type HTTPRequest
- type HTTPRequestWrapper
- type HTTPResponse
- type HTTPResponseWrapper
- type ICMPSegment
- type ICMPv6Segment
- type IPProto
- type IPv4Flags
- type IPv4Packet
- func (p *IPv4Packet) MarshalBinary() ([]byte, error)
- func (p *IPv4Packet) Name() LayerName
- func (p *IPv4Packet) NextLayer() Layer
- func (p *IPv4Packet) Parse(data []byte) error
- func (p *IPv4Packet) PseudoHeader() *IPv4PseudoHeader
- func (p *IPv4Packet) SetPayload(payload []byte)
- func (p *IPv4Packet) String() string
- func (p *IPv4Packet) Summary() string
- func (p *IPv4Packet) ToBytes() []byte
- func (p *IPv4Packet) UnmarshalBinary(data []byte) error
- type IPv4Proto
- type IPv4PseudoHeader
- type IPv6Packet
- type Layer
- type LayerName
- type Message
- type Operation
- type QueryEntry
- type RDataA
- type RDataAAAA
- type RDataCNAME
- type RDataHTTPS
- type RDataMX
- type RDataNS
- type RDataOPT
- type RDataSOA
- type RDataTXT
- type RDataUnknown
- type Record
- type RecordClass
- type RecordType
- type ResourceRecord
- type SNMPMessage
- type SSHMessage
- type ServerName
- type SvcParam
- type SvcParamKey
- type TCPFlag
- type TCPFlags
- type TCPSegment
- type TLSClientHello
- type TLSClientHelloRequest
- type TLSClientHelloRequestWrapper
- type TLSMessage
- type TLSServerHello
- type TLSServerHelloResponse
- type TLSServerHelloResponseWrapper
- type TLSVersion
- type TrafficClass
- type UDPSegment
- func (u *UDPSegment) MarshalBinary() ([]byte, error)
- func (u *UDPSegment) Name() LayerName
- func (u *UDPSegment) NextLayer() Layer
- func (u *UDPSegment) Parse(data []byte) error
- func (u *UDPSegment) SetChecksum(pseudo []byte) error
- func (u *UDPSegment) String() string
- func (u *UDPSegment) Summary() string
- func (u *UDPSegment) ToBytes() []byte
- func (u *UDPSegment) UnmarshalBinary(data []byte) error
Constants ¶
const ( HandshakeTLSVal = 0x16 // 22 ClientHelloTLSVal = 0x01 ServerHelloTLSVal = 0x02 )
Variables ¶
var ( ErrParsingAddress = fmt.Errorf("failed parsing IP address") ErrSliceBounds = fmt.Errorf("slice bounds out of range") )
var ErrTLSTooShort = fmt.Errorf("tls message too short")
Functions ¶
func CalculateIPv4Checksum ¶ added in v0.0.9
func CalculateUDPChecksum ¶ added in v0.0.9
func GenerateRandomBytes ¶ added in v0.0.14
func GenerateRandomUint16BE ¶ added in v0.0.14
func GenerateRandomUint16LE ¶ added in v0.0.14
func GenerateRandomUint16NE ¶ added in v0.0.14
func MustGenerateRandomUint16NE ¶ added in v0.0.14
func MustGenerateRandomUint16NE() uint16
Types ¶
type ARPOperation ¶ added in v0.0.6
func (*ARPOperation) String ¶ added in v0.0.6
func (ao *ARPOperation) String() string
type ARPPacket ¶
type ARPPacket struct {
HardwareType uint16 // Network link protocol type.
ProtocolType uint16 // Internetwork protocol for which the ARP request is intended.
ProtocolTypeDesc string // Internetwork protocol description.
Hlen uint8 // Length (in octets) of a hardware address.
Plen uint8 // Length (in octets) of internetwork addresses.
Op *ARPOperation // Specifies the operation that the sender is performing.
// Media address of the sender. In an ARP request this field is used to indicate
// the address of the host sending the request. In an ARP reply this field is used
// to indicate the address of the host that the request was looking for.
SenderMAC net.HardwareAddr
SenderIP netip.Addr // Internetwork address of the sender.
// Media address of the intended receiver. In an ARP request this field is ignored.
// In an ARP reply this field is used to indicate the address of the host that originated the ARP request.
TargetMAC net.HardwareAddr
TargetIP netip.Addr // Internetwork address of the intended receiver.
DstVendor string
SrcVendor string
}
ARPPacket represents The Address Resolution Protocol (ARP) that is a communication protocol used for discovering the link layer address, such as a MAC address, associated with a given internet layer address, typically an IPv4 address. Defined in RFC 826.
func NewARPPacket ¶ added in v0.0.6
func (*ARPPacket) MarshalBinary ¶ added in v0.0.6
MarshalBinary implements encoding.BinaryMarshaler interface
func (*ARPPacket) UnmarshalBinary ¶ added in v0.0.6
UnmarshalBinary implements encoding.BinaryUnmarshaler interface
type CipherSuite ¶ added in v0.0.3
func (*CipherSuite) String ¶ added in v0.0.3
func (cs *CipherSuite) String() string
type DNSFlags ¶
type DNSFlags struct {
Raw uint16 `json:"raw"`
QR uint8 `json:"qr"` // Indicates if the message is a query (0) or a reply (1).
QRDesc string `json:"qrdesc"` // Query (0) or Reply (1)
OPCode uint8 `json:"opcode"` // https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-5
OPCodeDesc string `json:"opcodedesc"`
AA uint8 `json:"aa"` // Authoritative Answer, in a response, indicates if the DNS server is authoritative for the queried hostname.
TC uint8 `json:"tc"` // TrunCation, indicates that this message was truncated due to excessive length.
RD uint8 `json:"rd"` // Recursion Desired, indicates if the client means a recursive query.
RA uint8 `json:"ra"` // Recursion Available, in a response, indicates if the replying DNS server supports recursion.
Z uint8 `json:"z"` // Zero, reserved for future use.
AU uint8 `json:"au"` // Indicates if answer/authority portion was authenticated by the server.
NA uint8 `json:"na"` // Indicates if non-authenticated data is accepatable.
RCode uint8 `json:"rcode"` // https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-6
RCodeDesc string `json:"rcodedesc"`
}
type DNSMessage ¶
type DNSMessage struct {
TransactionID uint16 `json:"transaction-id"` // Used for matching response to queries.
Flags *DNSFlags `json:"flags,omitempty"` // Flags specify the requested operation and a response code.
QDCount uint16 `json:"questions-count"` // Count of entries in the queries section.
ANCount uint16 `json:"answer-rrs-count"` // Count of entries in the answers section.
NSCount uint16 `json:"authority-rrs-count"` // Count of entries in the authority section.
ARCount uint16 `json:"additional-rrs-count"` // Count of entries in the additional section.
Questions []*QueryEntry `json:"questions,omitempty"`
AnswerRRs []*ResourceRecord `json:"answers,omitempty"`
AuthorityRRs []*ResourceRecord `json:"authoritative-nameservers,omitempty"`
AdditionalRRs []*ResourceRecord `json:"additional-records,omitempty"`
}
func (*DNSMessage) MarshalJSON ¶ added in v0.0.14
func (d *DNSMessage) MarshalJSON() ([]byte, error)
func (*DNSMessage) Name ¶ added in v0.0.14
func (d *DNSMessage) Name() LayerName
func (*DNSMessage) NextLayer ¶
func (d *DNSMessage) NextLayer() Layer
func (*DNSMessage) Parse ¶
func (d *DNSMessage) Parse(data []byte) error
Parse parses the given byte data into a DNSMessage struct.
func (*DNSMessage) String ¶
func (d *DNSMessage) String() string
func (*DNSMessage) Summary ¶
func (d *DNSMessage) Summary() string
func (*DNSMessage) UnmarshalBinary ¶ added in v0.0.14
func (d *DNSMessage) UnmarshalBinary(data []byte) error
type EthernetFrame ¶
type EthernetFrame struct {
DstMAC net.HardwareAddr // MAC address of the destination device.
SrcMAC net.HardwareAddr // MAC address of the source device.
EtherType *EthernetType // The protocol of the upper layer.
Payload []byte
DstVendor string
SrcVendor string
}
EthernetFrame represents Ethernet Frame An Ethernet frame is a data link layer protocol data unit.
func NewEthernetFrame ¶ added in v0.0.6
func NewEthernetFrame(dstMAC, srcMAC net.HardwareAddr, et EtherType, payload []byte) (*EthernetFrame, error)
func (*EthernetFrame) MarshalBinary ¶ added in v0.0.6
func (ef *EthernetFrame) MarshalBinary() ([]byte, error)
func (*EthernetFrame) Name ¶ added in v0.0.14
func (ef *EthernetFrame) Name() LayerName
func (*EthernetFrame) NextLayer ¶
func (ef *EthernetFrame) NextLayer() Layer
func (*EthernetFrame) Parse ¶
func (ef *EthernetFrame) Parse(data []byte) error
Parse parses the given byte data into an Ethernet frame.
func (*EthernetFrame) String ¶
func (ef *EthernetFrame) String() string
func (*EthernetFrame) Summary ¶
func (ef *EthernetFrame) Summary() string
func (*EthernetFrame) ToBytes ¶ added in v0.0.6
func (ef *EthernetFrame) ToBytes() []byte
func (*EthernetFrame) UnmarshalBinary ¶ added in v0.0.6
func (ef *EthernetFrame) UnmarshalBinary(data []byte) error
type EthernetType ¶ added in v0.0.6
func (*EthernetType) String ¶ added in v0.0.6
func (et *EthernetType) String() string
type FTPMessage ¶
type FTPMessage struct {
// contains filtered or unexported fields
}
func (*FTPMessage) Name ¶ added in v0.0.14
func (f *FTPMessage) Name() LayerName
func (*FTPMessage) NextLayer ¶
func (f *FTPMessage) NextLayer() Layer
func (*FTPMessage) Parse ¶
func (f *FTPMessage) Parse(data []byte) error
func (*FTPMessage) String ¶
func (f *FTPMessage) String() string
func (*FTPMessage) Summary ¶
func (f *FTPMessage) Summary() string
type HSTLSParser ¶ added in v0.0.3
func HSTLSParserByType ¶ added in v0.0.3
func HSTLSParserByType(hstype uint8) HSTLSParser
type HTTPMessage ¶
https://developer.mozilla.org/en-US/docs/Web/HTTP/Messages port 80
func (*HTTPMessage) IsEmpty ¶ added in v0.0.3
func (h *HTTPMessage) IsEmpty() bool
func (*HTTPMessage) MarshalJSON ¶ added in v0.0.4
func (h *HTTPMessage) MarshalJSON() ([]byte, error)
func (*HTTPMessage) Name ¶ added in v0.0.14
func (h *HTTPMessage) Name() LayerName
func (*HTTPMessage) NextLayer ¶
func (h *HTTPMessage) NextLayer() Layer
func (*HTTPMessage) Parse ¶
func (h *HTTPMessage) Parse(data []byte) error
func (*HTTPMessage) String ¶
func (h *HTTPMessage) String() string
func (*HTTPMessage) Summary ¶
func (h *HTTPMessage) Summary() string
type HTTPRequest ¶ added in v0.0.4
type HTTPRequestWrapper ¶ added in v0.0.4
type HTTPRequestWrapper struct {
Request *HTTPRequest `json:"http_request"`
}
type HTTPResponse ¶ added in v0.0.4
type HTTPResponseWrapper ¶ added in v0.0.4
type HTTPResponseWrapper struct {
Response *HTTPResponse `json:"http_response"`
}
type ICMPSegment ¶
type ICMPSegment struct {
Type uint8 // ICMP type.
TypeDesc string // ICMP type description.
Code uint8 // ICMP subtype.
CodeDesc string // ICMP subtype description.
// Internet checksum (RFC 1071) for error checking, calculated from the ICMP header
// and data with value 0 substituted for this field.
Checksum uint16
Data []byte // Contents vary based on the ICMP type and code.
}
ICMP is part of the Internet protocol suite as defined in RFC 792.
func (*ICMPSegment) Name ¶ added in v0.0.14
func (i *ICMPSegment) Name() LayerName
func (*ICMPSegment) NextLayer ¶
func (i *ICMPSegment) NextLayer() Layer
func (*ICMPSegment) Parse ¶
func (i *ICMPSegment) Parse(data []byte) error
Parse parses the given byte data into an ICMP segment struct.
func (*ICMPSegment) String ¶
func (i *ICMPSegment) String() string
func (*ICMPSegment) Summary ¶
func (i *ICMPSegment) Summary() string
type ICMPv6Segment ¶
type ICMPv6Segment struct {
Type uint8
TypeDesc string
Code uint8
CodeDesc string
Checksum uint16
Data []byte
}
ICMPv6 is an integral part of IPv6 and performs error reporting and diagnostic functions.
func (*ICMPv6Segment) Name ¶ added in v0.0.14
func (i *ICMPv6Segment) Name() LayerName
func (*ICMPv6Segment) NextLayer ¶
func (i *ICMPv6Segment) NextLayer() Layer
func (*ICMPv6Segment) Parse ¶
func (i *ICMPv6Segment) Parse(data []byte) error
Parse parses the given byte data into an ICMPv6 segment struct.
func (*ICMPv6Segment) String ¶
func (i *ICMPv6Segment) String() string
func (*ICMPv6Segment) Summary ¶
func (i *ICMPv6Segment) Summary() string
type IPv4Flags ¶
func NewIPv4Flags ¶ added in v0.0.9
type IPv4Packet ¶
type IPv4Packet struct {
// Internet Protocol version 4 is described in IETF publication RFC 791.
Version uint8 // 4 bits version (for IPv4, this is always equal to 4).
IHL uint8 // 4 bits size of header (number of 32-bit words).
DSCP uint8 // 6 bits specifies differentiated services.
DSCPDesc string // differentiated services description.
ECN uint8 // 2 bits end-to-end notification of network congestion without dropping packets.
TotalLength uint16 // 16 bits defines the entire packet size in bytes, including header and data.
Identification uint16 // 16 bits identifies the group of fragments of a single IP datagram.
Flags *IPv4Flags // 3 bits used to control or identify fragments.
FragmentOffset uint16 // 13 bits offset of a particular fragment.
TTL uint8 // 8 bits limits a datagram's lifetime to prevent network failure.
Protocol *IPv4Proto
HeaderChecksum uint16 // 16 bits used for error checking of the header.
SrcIP netip.Addr // IPv4 address of the sender of the packet.
DstIP netip.Addr // IPv4 address of the receiver of the packet.
Options []byte // if ihl > 5
Payload []byte
}
func NewIPv4Packet ¶ added in v0.0.9
func (*IPv4Packet) MarshalBinary ¶ added in v0.0.9
func (p *IPv4Packet) MarshalBinary() ([]byte, error)
func (*IPv4Packet) Name ¶ added in v0.0.14
func (p *IPv4Packet) Name() LayerName
func (*IPv4Packet) NextLayer ¶
func (p *IPv4Packet) NextLayer() Layer
func (*IPv4Packet) Parse ¶
func (p *IPv4Packet) Parse(data []byte) error
Parse parses the given byte data into an IPv4 packet struct.
func (*IPv4Packet) PseudoHeader ¶ added in v0.0.9
func (p *IPv4Packet) PseudoHeader() *IPv4PseudoHeader
func (*IPv4Packet) SetPayload ¶ added in v0.0.14
func (p *IPv4Packet) SetPayload(payload []byte)
func (*IPv4Packet) String ¶
func (p *IPv4Packet) String() string
func (*IPv4Packet) Summary ¶
func (p *IPv4Packet) Summary() string
func (*IPv4Packet) ToBytes ¶ added in v0.0.9
func (p *IPv4Packet) ToBytes() []byte
func (*IPv4Packet) UnmarshalBinary ¶ added in v0.0.9
func (p *IPv4Packet) UnmarshalBinary(data []byte) error
type IPv4Proto ¶ added in v0.0.9
type IPv4PseudoHeader ¶ added in v0.0.9
type IPv4PseudoHeader struct {
SrcIP netip.Addr
DstIP netip.Addr
Protocol *IPv4Proto
TotalLength uint16
}
func (*IPv4PseudoHeader) MarshalBinary ¶ added in v0.0.9
func (ph *IPv4PseudoHeader) MarshalBinary() ([]byte, error)
func (*IPv4PseudoHeader) ToBytes ¶ added in v0.0.9
func (ph *IPv4PseudoHeader) ToBytes() []byte
type IPv6Packet ¶
type IPv6Packet struct {
Version uint8 // 4 bits version field (for IPv6, this is always equal to 6).
TrafficClass *TrafficClass // 6 + 2 bits holds DS and ECN values.
FlowLabel uint32 // 20 bits high-entropy identifier of a flow of packets between a source and destination.
PayloadLength uint16 // 16 bits the size of the payload in octets, including any extension headers.
NextHeader uint8 // 8 bits specifies the type of the next header.
NextHeaderDesc string // next header description
// 8 bits replaces the time to live field in IPv4. This value is decremented by one at each forwarding node
// and the packet is discarded if it becomes 0. However, the destination node should process the packet normally
// even if received with a hop limit of 0.
HopLimit uint8
SrcIP netip.Addr // The unicast IPv6 address of the sending node.
DstIP netip.Addr // The IPv6 unicast or multicast address of the destination node(s).
Payload []byte
}
An IPv6 packet is the smallest message entity exchanged using Internet Protocol version 6 (IPv6). IPv6 protocol defined in RFC 2460.
func (*IPv6Packet) Name ¶ added in v0.0.14
func (p *IPv6Packet) Name() LayerName
func (*IPv6Packet) NextLayer ¶
func (p *IPv6Packet) NextLayer() Layer
func (*IPv6Packet) Parse ¶
func (p *IPv6Packet) Parse(data []byte) error
Parse parses the given byte data into an IPv6 packet struct.
func (*IPv6Packet) String ¶
func (p *IPv6Packet) String() string
func (*IPv6Packet) Summary ¶
func (p *IPv6Packet) Summary() string
type Layer ¶
type Layer interface {
fmt.Stringer
Parse(data []byte) error
NextLayer() Layer
Summary() string
Name() LayerName
}
func ParseNextLayer ¶ added in v0.0.14
type LayerName ¶ added in v0.0.14
type LayerName string
const ( LayerETH LayerName = "ETH" LayerIPv4 LayerName = "IPv4" LayerIPv6 LayerName = "IPv6" LayerARP LayerName = "ARP" LayerTCP LayerName = "TCP" LayerUDP LayerName = "UDP" LayerICMP LayerName = "ICMP" LayerICMPv6 LayerName = "ICMPv6" LayerDNS LayerName = "DNS" LayerFTP LayerName = "FTP" LayerHTTP LayerName = "HTTP" LayerSNMP LayerName = "SNMP" LayerSSH LayerName = "SSH" LayerTLS LayerName = "TLS" )
type Message ¶
type QueryEntry ¶
type QueryEntry struct {
Name string `json:"name"` // Name of the node to which this record pertains.
Type *RecordType `json:"record-type"` // Type of RR in numeric form.
Class *RecordClass `json:"record-class"` // Class code.
}
func (*QueryEntry) String ¶
func (qe *QueryEntry) String() string
type RDataCNAME ¶
type RDataCNAME struct {
CName string `json:"cname"`
}
func (*RDataCNAME) String ¶
func (d *RDataCNAME) String() string
type RDataHTTPS ¶
type RDataHTTPS struct {
SvcPriority uint16 `json:"svc-priority"`
Length int `json:"length"`
TargetName string `json:"target-name"`
SvcParams []*SvcParam `json:"svc-params"`
}
func (*RDataHTTPS) String ¶
func (d *RDataHTTPS) String() string
type RDataOPT ¶
type RDataSOA ¶
type RDataSOA struct {
PrimaryNS string `json:"primary-nameserver"`
RespAuthorityMailbox string `json:"responsible-authority-mailbox"`
SerialNumber uint32 `json:"serial-number"`
RefreshInterval uint32 `json:"refresh-interval"`
RetryInterval uint32 `json:"retry-interval"`
ExpireLimit uint32 `json:"expire-limit"`
MinimumTTL uint32 `json:"minimum-ttl"`
}
type RDataUnknown ¶
type RDataUnknown struct {
Data string `json:"data"`
}
func (*RDataUnknown) String ¶
func (d *RDataUnknown) String() string
type Record ¶
type Record struct {
ContentType uint8
ContentTypeDesc string
Version *TLSVersion
Length uint16
Data []byte
}
type RecordClass ¶
func (*RecordClass) String ¶
func (c *RecordClass) String() string
type RecordType ¶
func (*RecordType) String ¶
func (rt *RecordType) String() string
type ResourceRecord ¶
type ResourceRecord struct {
Name string `json:"name"` // Name of the node to which this record pertains.
Type *RecordType `json:"record-type"` // Type of RR in numeric form.
Class *RecordClass `json:"record-class"` // Class code.
TTL uint32 `json:"ttl"` // Count of seconds that the RR stays valid.
RDLength uint16 `json:"rdata-length"` // Length of RData field (specified in octets).
RData fmt.Stringer `json:"rdata"` // Additional RR-specific data.
}
func (*ResourceRecord) String ¶
func (rt *ResourceRecord) String() string
func (*ResourceRecord) Summary ¶ added in v0.0.14
func (rt *ResourceRecord) Summary() string
type SNMPMessage ¶
type SNMPMessage struct {
Payload []byte
}
https://www.ranecommercial.com/legacy/pdf/ranenotes/SNMP_Simple_Network_Management_Protocol.pdf https://wiki.wireshark.org/SNMP port 161, 162
func (*SNMPMessage) Name ¶ added in v0.0.14
func (s *SNMPMessage) Name() LayerName
func (*SNMPMessage) NextLayer ¶
func (s *SNMPMessage) NextLayer() Layer
func (*SNMPMessage) Parse ¶
func (s *SNMPMessage) Parse(data []byte) error
func (*SNMPMessage) String ¶
func (s *SNMPMessage) String() string
func (*SNMPMessage) Summary ¶
func (s *SNMPMessage) Summary() string
type SSHMessage ¶
func (*SSHMessage) Name ¶ added in v0.0.14
func (s *SSHMessage) Name() LayerName
func (*SSHMessage) NextLayer ¶
func (s *SSHMessage) NextLayer() Layer
func (*SSHMessage) Parse ¶
func (s *SSHMessage) Parse(data []byte) error
func (*SSHMessage) String ¶
func (s *SSHMessage) String() string
func (*SSHMessage) Summary ¶
func (s *SSHMessage) Summary() string
type ServerName ¶ added in v0.0.3
type ServerName struct {
Type uint16
Length uint16
SNListLength uint16
SNType uint8
SNNameLength uint16
SNName string
}
func (*ServerName) Parse ¶ added in v0.0.3
func (sn *ServerName) Parse(data []byte) error
func (*ServerName) String ¶ added in v0.0.3
func (sn *ServerName) String() string
type SvcParam ¶ added in v0.0.14
type SvcParam struct {
Key *SvcParamKey `json:"svc-param-key"`
Length uint16 `json:"svc-param-value-length"`
Value []byte `json:"svc-param-value"` // TODO: add proper parsing
}
type SvcParamKey ¶ added in v0.0.14
func (*SvcParamKey) String ¶ added in v0.0.14
func (spk *SvcParamKey) String() string
type TCPSegment ¶
type TCPSegment struct {
SrcPort uint16 // Identifies the sending port.
DstPort uint16 // Identifies the receiving port.
// If the SYN flag is set (1), then this is the initial sequence number. The sequence number of the actual
// first data byte and the acknowledged number in the corresponding ACK are then this sequence number plus 1.
// If the SYN flag is unset (0), then this is the accumulated sequence number of the first data byte of this
// segment for the current session.
SeqNumber uint32
// If the ACK flag is set, the value is the next sequence number that the sender of the ACK is expecting.
AckNumber uint32
DataOffset uint8 // 4 bits specifies the size of the TCP header in 32-bit words.
Reserved uint8 // 4 bits reserved for future use and should be set to zero.
Flags *TCPFlags // Contains 8 1-bit flags (control bits)
// The size of the receive window, which specifies the number of window size units[b] that the sender of
// this segment is currently willing to receive.
WindowSize uint16
// The 16-bit checksum field is used for error-checking of the TCP header, the payload and an IP pseudo-header.
Checksum uint16
// If the URG flag is set, then this 16-bit field is an offset from the sequence number
// indicating the last urgent data byte.
UrgentPointer uint16
Options []byte // The length of this field is determined by the data offset field.
Payload []byte
}
TCP protocol is described in RFC 761.
func (*TCPSegment) Name ¶ added in v0.0.14
func (t *TCPSegment) Name() LayerName
func (*TCPSegment) NextLayer ¶
func (t *TCPSegment) NextLayer() Layer
func (*TCPSegment) Parse ¶
func (t *TCPSegment) Parse(data []byte) error
Parse parses the given byte data into a TCPSegment struct.
func (*TCPSegment) String ¶
func (t *TCPSegment) String() string
func (*TCPSegment) Summary ¶
func (t *TCPSegment) Summary() string
type TLSClientHello ¶ added in v0.0.3
type TLSClientHello struct {
Type uint8
TypeDesc string
Length int // 3 bytes int(uint(b[2]) | uint(b[1])<<8 | uint(b[0])<<16))
Version *TLSVersion
Random []byte // 32 bytes
SessionIDLength uint8 // if 0 no session follows
SessionID string
CipherSuitesLength uint16
CipherSuites []*CipherSuite
CmprMethodsLength uint8 // usually 0x01
CmprMethods []byte // usually 0x00
ExtensionLength uint16
Extensions []*Extension
ServerName *ServerName
ALPN []string
}
https://wiki.osdev.org/TLS_Handshake#Client_Hello_Message
func (*TLSClientHello) MarshalJSON ¶ added in v0.0.4
func (tch *TLSClientHello) MarshalJSON() ([]byte, error)
func (*TLSClientHello) ParseHS ¶ added in v0.0.3
func (tch *TLSClientHello) ParseHS(data []byte) error
func (*TLSClientHello) String ¶ added in v0.0.3
func (tch *TLSClientHello) String() string
type TLSClientHelloRequest ¶ added in v0.0.4
type TLSClientHelloRequest struct {
SNI string `json:"sni,omitempty"`
Type string `json:"type,omitempty"`
Version string `json:"version,omitempty"`
SessionID string `json:"session_id,omitempty"`
CipherSuites []string `json:"cipher_suites,omitempty"`
Extensions []string `json:"extensions,omitempty"`
ALPN []string `json:"alpn,omitempty"`
}
type TLSClientHelloRequestWrapper ¶ added in v0.0.4
type TLSClientHelloRequestWrapper struct {
Request TLSClientHelloRequest `json:"tls_request"`
}
type TLSMessage ¶
port 443 https://tls12.xargs.org/#client-hello/annotated https://tls13.xargs.org/#client-hello/annotated https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-5
func (*TLSMessage) Name ¶ added in v0.0.14
func (t *TLSMessage) Name() LayerName
func (*TLSMessage) NextLayer ¶
func (t *TLSMessage) NextLayer() Layer
func (*TLSMessage) Parse ¶
func (t *TLSMessage) Parse(data []byte) error
func (*TLSMessage) String ¶
func (t *TLSMessage) String() string
func (*TLSMessage) Summary ¶
func (t *TLSMessage) Summary() string
type TLSServerHello ¶ added in v0.0.3
type TLSServerHello struct {
Type uint8
TypeDesc string
Length int // 3 bytes int(uint(b[2]) | uint(b[1])<<8 | uint(b[0])<<16))
Version *TLSVersion
Random []byte // 32 bytes
SessionIDLength uint8 // if 0 no session follows
SessionID string
CipherSuite *CipherSuite
CmprMethod uint8
ExtensionLength uint16
Extensions []*Extension
SupportedVersion *TLSVersion
}
https://wiki.osdev.org/TLS_Handshake#Server_Hello_Message
func (*TLSServerHello) MarshalJSON ¶ added in v0.0.4
func (tsh *TLSServerHello) MarshalJSON() ([]byte, error)
func (*TLSServerHello) ParseHS ¶ added in v0.0.3
func (tsh *TLSServerHello) ParseHS(data []byte) error
func (*TLSServerHello) String ¶ added in v0.0.3
func (tsh *TLSServerHello) String() string
type TLSServerHelloResponse ¶ added in v0.0.4
type TLSServerHelloResponse struct {
Type string `json:"type,omitempty"`
Version string `json:"version,omitempty"`
SessionID string `json:"session_id,omitempty"`
CipherSuite string `json:"cipher_suite,omitempty"`
Extensions []string `json:"extensions,omitempty"`
SupportedVersion string `json:"supported_version,omitempty"`
}
type TLSServerHelloResponseWrapper ¶ added in v0.0.4
type TLSServerHelloResponseWrapper struct {
Response TLSServerHelloResponse `json:"tls_response"`
}
type TLSVersion ¶ added in v0.0.3
func (*TLSVersion) String ¶ added in v0.0.3
func (tv *TLSVersion) String() string
type TrafficClass ¶
func (*TrafficClass) String ¶
func (p *TrafficClass) String() string
type UDPSegment ¶
type UDPSegment struct {
// UDP protocol is defined in RFC 768.
SrcPort uint16 // Identifies the sending port.
DstPort uint16 // Identifies the receiving port.
UDPLength uint16 // Specifies the length in bytes of the UDP header and UDP data.
Checksum uint16 // The checksum field may be used for error-checking of the header and data.
Payload []byte
}
func NewUDPSegment ¶ added in v0.0.9
func NewUDPSegment(srcPort, dstPort uint16, payload []byte) (*UDPSegment, error)
func (*UDPSegment) MarshalBinary ¶ added in v0.0.9
func (u *UDPSegment) MarshalBinary() ([]byte, error)
func (*UDPSegment) Name ¶ added in v0.0.14
func (u *UDPSegment) Name() LayerName
func (*UDPSegment) NextLayer ¶
func (u *UDPSegment) NextLayer() Layer
func (*UDPSegment) Parse ¶
func (u *UDPSegment) Parse(data []byte) error
Parse parses the given byte data into a UDPSegment struct.
func (*UDPSegment) SetChecksum ¶ added in v0.0.14
func (u *UDPSegment) SetChecksum(pseudo []byte) error
func (*UDPSegment) String ¶
func (u *UDPSegment) String() string
func (*UDPSegment) Summary ¶
func (u *UDPSegment) Summary() string
func (*UDPSegment) ToBytes ¶ added in v0.0.9
func (u *UDPSegment) ToBytes() []byte
func (*UDPSegment) UnmarshalBinary ¶ added in v0.0.9
func (u *UDPSegment) UnmarshalBinary(data []byte) error