Documentation
¶
Overview ¶
Package layers
Index ¶
- Constants
- Variables
- func CalculateIPv4Checksum(data []byte) (uint16, error)
- func CalculateInternetChecksum(data []byte, checksumOffset int) (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 ICMPv6Message
- type ICMPv6MessageType
- type ICMPv6NeighborAdvertisement
- type ICMPv6NeighborSolicitation
- type ICMPv6OptLinkLayerAddress
- type ICMPv6OptMTU
- type ICMPv6OptPrefixInfo
- type ICMPv6OptRDNSS
- type ICMPv6Option
- type ICMPv6OptionType
- type ICMPv6RouterAdvertisement
- type ICMPv6RouterPreference
- type ICMPv6RouterSolicitation
- type ICMPv6Segment
- func (i *ICMPv6Segment) MarshalBinary() ([]byte, error)
- func (i *ICMPv6Segment) Name() LayerName
- func (i *ICMPv6Segment) NextLayer() Layer
- func (i *ICMPv6Segment) Parse(data []byte) error
- func (i *ICMPv6Segment) String() string
- func (i *ICMPv6Segment) Summary() string
- func (i *ICMPv6Segment) ToBytes() []byte
- func (i *ICMPv6Segment) UnmarshalBinary(data []byte) error
- type IPProto
- type IPProtocol
- 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 IPv4PseudoHeader
- type IPv6Packet
- func (p *IPv6Packet) MarshalBinary() ([]byte, error)
- func (p *IPv6Packet) Name() LayerName
- func (p *IPv6Packet) NextLayer() Layer
- func (p *IPv6Packet) Parse(data []byte) error
- func (p *IPv6Packet) PseudoHeader() *IPv6PseudoHeader
- func (p *IPv6Packet) SetPayload(payload []byte)
- func (p *IPv6Packet) String() string
- func (p *IPv6Packet) Summary() string
- func (p *IPv6Packet) ToBytes() []byte
- func (p *IPv6Packet) UnmarshalBinary(data []byte) error
- type IPv6PseudoHeader
- type LLADirection
- 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 ( ICMPv6OptLenLLA int = 1 // length in 8 octets with 6 byte hardware address ICMPv6OptLenPrefixInfo int = 4 ICMPv6OptLenMTU int = 1 ICMPv6OptLenRDNSS int = 3 ICMPv6RSLen int = 8 ICMPv6RALen int = 16 ICMPv6NSLen int = 24 ICMPv6NALen int = 24 )
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 CalculateInternetChecksum ¶ added in v0.0.21
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.13
func (d *DNSMessage) MarshalJSON() ([]byte, error)
func (*DNSMessage) Name ¶ added in v0.0.13
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.13
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.13
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.13
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.13
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.13
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 ICMPv6Message ¶ added in v0.0.21
type ICMPv6MessageType ¶ added in v0.0.21
type ICMPv6MessageType uint8
const ( ICMPv6TypeRouterSolicitation ICMPv6MessageType = 133 ICMPv6TypeRouterAdvertisement ICMPv6MessageType = 134 ICMPv6TypeNeighborSolicitation ICMPv6MessageType = 135 ICMPv6TypeNeighborAdvertisement ICMPv6MessageType = 136 )
type ICMPv6NeighborAdvertisement ¶ added in v0.0.21
type ICMPv6NeighborAdvertisement struct {
Checksum uint16
Router bool
Solicited bool
Override bool
TargetAddress netip.Addr
Options []ICMPv6Option
}
ICMPv6NeighborAdvertisement format described in https://datatracker.ietf.org/doc/html/rfc2461#section-4.4
func (*ICMPv6NeighborAdvertisement) MarshalBinary ¶ added in v0.0.21
func (na *ICMPv6NeighborAdvertisement) MarshalBinary() ([]byte, error)
func (*ICMPv6NeighborAdvertisement) SetChecksum ¶ added in v0.0.21
func (na *ICMPv6NeighborAdvertisement) SetChecksum(pseudo []byte) error
func (*ICMPv6NeighborAdvertisement) ToBytes ¶ added in v0.0.21
func (na *ICMPv6NeighborAdvertisement) ToBytes() []byte
func (*ICMPv6NeighborAdvertisement) Type ¶ added in v0.0.21
func (na *ICMPv6NeighborAdvertisement) Type() ICMPv6MessageType
type ICMPv6NeighborSolicitation ¶ added in v0.0.21
type ICMPv6NeighborSolicitation struct {
Checksum uint16
TargetAddress netip.Addr
Options []ICMPv6Option
}
ICMPv6NeighborSolicitation format described in https://datatracker.ietf.org/doc/html/rfc2461#section-4.3
func (*ICMPv6NeighborSolicitation) MarshalBinary ¶ added in v0.0.21
func (ns *ICMPv6NeighborSolicitation) MarshalBinary() ([]byte, error)
func (*ICMPv6NeighborSolicitation) SetChecksum ¶ added in v0.0.21
func (ns *ICMPv6NeighborSolicitation) SetChecksum(pseudo []byte) error
func (*ICMPv6NeighborSolicitation) ToBytes ¶ added in v0.0.21
func (ns *ICMPv6NeighborSolicitation) ToBytes() []byte
func (*ICMPv6NeighborSolicitation) Type ¶ added in v0.0.21
func (ns *ICMPv6NeighborSolicitation) Type() ICMPv6MessageType
type ICMPv6OptLinkLayerAddress ¶ added in v0.0.21
type ICMPv6OptLinkLayerAddress struct {
Direction LLADirection
Addr net.HardwareAddr
}
ICMPv6OptLinkLayerAddress format described in https://datatracker.ietf.org/doc/html/rfc2461#section-4.6.1
func (*ICMPv6OptLinkLayerAddress) MarshalBinary ¶ added in v0.0.21
func (lla *ICMPv6OptLinkLayerAddress) MarshalBinary() ([]byte, error)
func (*ICMPv6OptLinkLayerAddress) OptType ¶ added in v0.0.21
func (lla *ICMPv6OptLinkLayerAddress) OptType() ICMPv6OptionType
func (*ICMPv6OptLinkLayerAddress) ToBytes ¶ added in v0.0.21
func (lla *ICMPv6OptLinkLayerAddress) ToBytes() []byte
type ICMPv6OptMTU ¶ added in v0.0.21
type ICMPv6OptMTU struct {
MTU uint32
}
ICMPv6OptMTU format described in https://datatracker.ietf.org/doc/html/rfc2461#section-4.6.4
func (*ICMPv6OptMTU) MarshalBinary ¶ added in v0.0.21
func (om *ICMPv6OptMTU) MarshalBinary() ([]byte, error)
func (*ICMPv6OptMTU) OptType ¶ added in v0.0.21
func (om *ICMPv6OptMTU) OptType() ICMPv6OptionType
func (*ICMPv6OptMTU) ToBytes ¶ added in v0.0.21
func (om *ICMPv6OptMTU) ToBytes() []byte
type ICMPv6OptPrefixInfo ¶ added in v0.0.21
type ICMPv6OptPrefixInfo struct {
PrefixLength uint8 // 0-128
OnLink bool
AutonomousAddressConfiguration bool
ValidLifetime uint32
PreferredLifetime uint32
Prefix netip.Addr
}
ICMPv6OptPrefixInfo format described in https://datatracker.ietf.org/doc/html/rfc2461#section-4.6.2
func (*ICMPv6OptPrefixInfo) MarshalBinary ¶ added in v0.0.21
func (pi *ICMPv6OptPrefixInfo) MarshalBinary() ([]byte, error)
func (*ICMPv6OptPrefixInfo) OptType ¶ added in v0.0.21
func (pi *ICMPv6OptPrefixInfo) OptType() ICMPv6OptionType
func (*ICMPv6OptPrefixInfo) ToBytes ¶ added in v0.0.21
func (pi *ICMPv6OptPrefixInfo) ToBytes() []byte
type ICMPv6OptRDNSS ¶ added in v0.0.21
ICMPv6OptRDNSS format described in https://datatracker.ietf.org/doc/html/rfc8106#section-5.1
func (*ICMPv6OptRDNSS) MarshalBinary ¶ added in v0.0.21
func (rd *ICMPv6OptRDNSS) MarshalBinary() ([]byte, error)
func (*ICMPv6OptRDNSS) OptType ¶ added in v0.0.21
func (rd *ICMPv6OptRDNSS) OptType() ICMPv6OptionType
func (*ICMPv6OptRDNSS) ToBytes ¶ added in v0.0.21
func (rd *ICMPv6OptRDNSS) ToBytes() []byte
type ICMPv6Option ¶ added in v0.0.21
type ICMPv6Option interface {
OptType() ICMPv6OptionType
MarshalBinary() ([]byte, error)
ToBytes() []byte
}
type ICMPv6OptionType ¶ added in v0.0.21
type ICMPv6OptionType uint8
const ( ICMPv6OptTypeSourceLLA ICMPv6OptionType = 1 ICMPv6OptTypeTargetLLA ICMPv6OptionType = 2 ICMPv6OptTypePrefixInfo ICMPv6OptionType = 3 ICMPv6OptTypeMTU ICMPv6OptionType = 5 ICMPv6OptTypeRDNSS ICMPv6OptionType = 25 )
type ICMPv6RouterAdvertisement ¶ added in v0.0.21
type ICMPv6RouterAdvertisement struct {
Checksum uint16
CurHopLimit uint8
ManagedConfiguration bool
OtherConfiguration bool
HomeAgent bool
Prf ICMPv6RouterPreference
NDProxy bool
SNACRouter bool
RouterLifetime uint16
ReachableTime uint32
RetranstTimer uint32
Options []ICMPv6Option
}
ICMPv6RouterAdvertisement format described in https://datatracker.ietf.org/doc/html/rfc2461#section-4.2
func (*ICMPv6RouterAdvertisement) MarshalBinary ¶ added in v0.0.21
func (ra *ICMPv6RouterAdvertisement) MarshalBinary() ([]byte, error)
func (*ICMPv6RouterAdvertisement) SetChecksum ¶ added in v0.0.21
func (ra *ICMPv6RouterAdvertisement) SetChecksum(pseudo []byte) error
func (*ICMPv6RouterAdvertisement) ToBytes ¶ added in v0.0.21
func (ra *ICMPv6RouterAdvertisement) ToBytes() []byte
func (*ICMPv6RouterAdvertisement) Type ¶ added in v0.0.21
func (ra *ICMPv6RouterAdvertisement) Type() ICMPv6MessageType
type ICMPv6RouterPreference ¶ added in v0.0.21
type ICMPv6RouterPreference int
const ( ICMPv6RouterPreferenceHigh ICMPv6RouterPreference = 0b01 ICMPv6RouterPreferenceMedium ICMPv6RouterPreference = 0b00 ICMPv6RouterPreferenceLow ICMPv6RouterPreference = 0b11 ICMPv6RouterPreferenceReserved ICMPv6RouterPreference = 0b10 )
type ICMPv6RouterSolicitation ¶ added in v0.0.21
type ICMPv6RouterSolicitation struct {
Checksum uint16
Options []ICMPv6Option
}
ICMPv6RouterSolicitation format described in https://datatracker.ietf.org/doc/html/rfc2461#section-4.1
func (*ICMPv6RouterSolicitation) MarshalBinary ¶ added in v0.0.21
func (rs *ICMPv6RouterSolicitation) MarshalBinary() ([]byte, error)
func (*ICMPv6RouterSolicitation) SetChecksum ¶ added in v0.0.21
func (rs *ICMPv6RouterSolicitation) SetChecksum(pseudo []byte) error
func (*ICMPv6RouterSolicitation) ToBytes ¶ added in v0.0.21
func (rs *ICMPv6RouterSolicitation) ToBytes() []byte
func (*ICMPv6RouterSolicitation) Type ¶ added in v0.0.21
func (rs *ICMPv6RouterSolicitation) Type() ICMPv6MessageType
type ICMPv6Segment ¶
type ICMPv6Segment struct {
Type uint8
TypeDesc string
Code uint8
CodeDesc string
Checksum uint16
Data []byte
}
ICMPv6Segment is an integral part of IPv6 and performs error reporting and diagnostic functions.
func (*ICMPv6Segment) MarshalBinary ¶ added in v0.0.21
func (i *ICMPv6Segment) MarshalBinary() ([]byte, error)
func (*ICMPv6Segment) Name ¶ added in v0.0.13
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
func (*ICMPv6Segment) ToBytes ¶ added in v0.0.21
func (i *ICMPv6Segment) ToBytes() []byte
func (*ICMPv6Segment) UnmarshalBinary ¶ added in v0.0.21
func (i *ICMPv6Segment) UnmarshalBinary(data []byte) error
type IPProto ¶ added in v0.0.9
type IPProto uint8
const ( ProtoHOPOPT IPProto = 0 ProtoICMP IPProto = 1 ProtoTCP IPProto = 6 ProtoUDP IPProto = 17 ProtoRoute IPProto = 43 ProtoFragment IPProto = 44 ProtoESP IPProto = 50 ProtoAuthHeader IPProto = 51 ProtoICMPv6 IPProto = 58 ProtoNoNxt IPProto = 59 ProtoOpts IPProto = 60 ProtoMobility IPProto = 135 ProtoHIP IPProto = 139 ProtoShim6 IPProto = 140 )
type IPProtocol ¶ added in v0.0.21
type IPProtocol struct {
Val IPProto // 8 bits defines the protocol used in the data portion of the IP datagram.
Desc string // Protocol description.
}
func NewIPv4Proto ¶ added in v0.0.21
func NewIPv4Proto(proto IPProto) *IPProtocol
func NewIPv6Proto ¶ added in v0.0.21
func NewIPv6Proto(proto IPProto) *IPProtocol
func (*IPProtocol) String ¶ added in v0.0.21
func (p *IPProtocol) String() 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 *IPProtocol
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.13
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.13
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 IPv4PseudoHeader ¶ added in v0.0.9
type IPv4PseudoHeader struct {
SrcIP netip.Addr
DstIP netip.Addr
Protocol *IPProtocol
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 *IPProtocol // 8 bits specifies the type of the next header.
// 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
}
IPv6Packet is the smallest message entity exchanged using Internet Protocol version 6 (IPv6). IPv6 protocol defined in RFC 2460.
func NewIPv6Packet ¶ added in v0.0.21
func (*IPv6Packet) MarshalBinary ¶ added in v0.0.21
func (p *IPv6Packet) MarshalBinary() ([]byte, error)
func (*IPv6Packet) Name ¶ added in v0.0.13
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) PseudoHeader ¶ added in v0.0.21
func (p *IPv6Packet) PseudoHeader() *IPv6PseudoHeader
func (*IPv6Packet) SetPayload ¶ added in v0.0.21
func (p *IPv6Packet) SetPayload(payload []byte)
func (*IPv6Packet) String ¶
func (p *IPv6Packet) String() string
func (*IPv6Packet) Summary ¶
func (p *IPv6Packet) Summary() string
func (*IPv6Packet) ToBytes ¶ added in v0.0.21
func (p *IPv6Packet) ToBytes() []byte
func (*IPv6Packet) UnmarshalBinary ¶ added in v0.0.21
func (p *IPv6Packet) UnmarshalBinary(data []byte) error
type IPv6PseudoHeader ¶ added in v0.0.21
type IPv6PseudoHeader struct {
SrcIP netip.Addr
DstIP netip.Addr
UpperLayerPacketLength uint32
NextHeader *IPProtocol
}
func (*IPv6PseudoHeader) MarshalBinary ¶ added in v0.0.21
func (ph *IPv6PseudoHeader) MarshalBinary() ([]byte, error)
func (*IPv6PseudoHeader) ToBytes ¶ added in v0.0.21
func (ph *IPv6PseudoHeader) ToBytes() []byte
type LLADirection ¶ added in v0.0.21
type LLADirection uint8
const ( LLASource LLADirection = LLADirection(ICMPv6OptTypeSourceLLA) LLATarget LLADirection = LLADirection(ICMPv6OptTypeTargetLLA) )
type Layer ¶
type Layer interface {
fmt.Stringer
Parse(data []byte) error
NextLayer() Layer
Summary() string
Name() LayerName
}
func ParseNextLayer ¶ added in v0.0.13
type LayerName ¶ added in v0.0.13
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.13
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.13
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.13
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.13
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.13
func (*SvcParamKey) String ¶ added in v0.0.13
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.13
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.13
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 NewTrafficClass ¶ added in v0.0.21
func NewTrafficClass(tc uint8) *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.13
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.13
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