Documentation ¶
Index ¶
- Constants
- Variables
- func GeneratePort() int
- func GenerateTCPPackage(srcIP net.IP, srcMac net.HardwareAddr, dstIP net.IP, dstMac net.HardwareAddr, ...) ([]byte, error)
- func GenerateUDPPackage(srcIP net.IP, srcMac net.HardwareAddr, dstIP net.IP, dstMac net.HardwareAddr, ...) ([]byte, error)
- func TimerCall(interval int, count int, callback func())
- type AdapterInfo
- type ProtocolObject
- func (p *ProtocolObject) Accept() (*Socket, int)
- func (p *ProtocolObject) Append(s *Socket)
- func (p *ProtocolObject) Bind(s *Socket)
- func (p *ProtocolObject) Close(s *Socket) int
- func (p *ProtocolObject) CloseAllofSockets()
- func (p *ProtocolObject) CloseDevice()
- func (p *ProtocolObject) Connect(targetIP net.IP, targetPort uint16, nexthopMAC net.HardwareAddr) (*Socket, error)
- func (p *ProtocolObject) InitAdapter(iftype int, param string) error
- func (p *ProtocolObject) IsInBufferSockets(s *Socket) (*Socket, bool)
- func (p *ProtocolObject) Recv(s *Socket, result *[]byte) int
- func (p *ProtocolObject) RecvFrom(result *[]byte) int
- func (p *ProtocolObject) RemoveSockFromList(s *Socket)
- func (p *ProtocolObject) Send(s *Socket, payload []byte) int
- func (p *ProtocolObject) Sendto(targetIP net.IP, targetPort uint16, nexthopMAC net.HardwareAddr, ...) int
- func (p *ProtocolObject) SetTimeout(timeout time.Duration)
- func (p *ProtocolObject) Startup() error
- func (p *ProtocolObject) Wait()
- type Socket
- type TCPSock
- type UDPSock
Constants ¶
View Source
const ( IFObtainType_IP = iota IFObtainType_DeviceLnkName )
View Source
const ( PCAP_IF_LOOPBACK = 0x00000001 /* interface is loopback */ PCAP_IF_UP = 0x00000002 /* interface is up */ PCAP_IF_RUNNING = 0x00000004 /* interface is running */ PCAP_IF_WIRELESS = 0x00000008 /* interface is wireless (*NOT* necessarily Wi-Fi!) */ PCAP_IF_CONNECTION_STATUS = 0x00000030 /* connection status: */ PCAP_IF_CONNECTION_STATUS_UNKNOWN = 0x00000000 /* unknown */ PCAP_IF_CONNECTION_STATUS_CONNECTED = 0x00000010 /* connected */ PCAP_IF_CONNECTION_STATUS_DISCONNECTED = 0x00000020 /* disconnected */ PCAP_IF_CONNECTION_STATUS_NOT_APPLICABLE = 0x00000030 /* not applicable */ )
View Source
const ( SocketType_STREAM int = iota + 1 SocketType_DGRAM )
协议类型
View Source
const ( TCP_SIGNAL_FIN = 0x01 TCP_SIGNAL_SYN = 0x02 TCP_SIGNAL_RST = 0x04 TCP_SIGNAL_PSH = 0x08 TCP_SIGNAL_ACK = 0x10 TCP_SIGNAL_URG = 0x20 )
TCP首部标记
View Source
const ( TS_UNKNOWN int = iota TCP_ESTABLISHED // 连接建立:数据传送在进行 TCP_SYN_SENT // 已发送SYN:等待ACK TCP_SYN_RECV // 已发送SYN+ACK: 等待ACK TCP_FIN_WAIT1 // 第一个FIN 已发送:等待ACK TCP_FIN_WAIT2 // 对第一个FIN 的ACK已收到:等待第二个FIN TCP_TIME_WAIT // 收到第二个FIN, 已发送ACK: 等待2MSL超时 TCP_CLOSE // 没有连接 TCP_CLOSE_WAIT // 收到第一个FIN , 已发送ACK:等待应用程序关闭 TCP_LAST_ACK // 收到第二个FIN, 已发送ACK: 等待2MSL超时 TCP_LISTEN // 收到了被动打开:等待 SYN TCP_CLOSING /* Now a valid state */ // 双发都已经决定同时关闭 TCP_MAX_STATES /* Leave at the end! */ )
tcp状态
View Source
const ( SocketMsg_Unknow int = iota SocketMsg_RecvData SocketMsg_Closed )
socket 消息 主要用于控制接受数据使用
View Source
const PRIME_32K int = 32261
生成随机端口 来自nmap 的源码
#define PRIME_32K 32261 //Change base_port to a new number in a safe port range that is unlikely to // conflict with nearby past or future invocations of ultra_scan. static u16 increment_base_port() { static u16 g_base_port = 33000 + get_random_uint() % PRIME_32K;
g_base_port = 33000 + (g_base_port - 33000 + 256) % PRIME_32K; return g_base_port; }
Variables ¶
View Source
var MSL int = 30
最大报文段寿命
View Source
var TCPStatusInfoMap = map[int]string{ TCP_ESTABLISHED: "Estableshed", TCP_SYN_SENT: "SynSent", TCP_SYN_RECV: "SynRecv", TCP_FIN_WAIT1: "FinWait1", TCP_FIN_WAIT2: "FinWait2", TCP_TIME_WAIT: "TimeWait", TCP_CLOSE: "Close", TCP_CLOSE_WAIT: "CloseWait", TCP_LAST_ACK: "LastACK", TCP_LISTEN: "Listening", TCP_CLOSING: "Closing", }
tcp 状态字符串
Functions ¶
func GeneratePort ¶
func GeneratePort() int
func GenerateTCPPackage ¶
func GenerateUDPPackage ¶
Types ¶
type AdapterInfo ¶
type ProtocolObject ¶
type ProtocolObject struct { SocketType int // 数据类型 DevHandle *device.DeviceHandle Ifs []pcap.Interface // 所有的接口信息 AdapterInfo Wg sync.WaitGroup TCPSocketsList map[string]*Socket // 保存所有的连接的socket UDPSocketsList map[string]*Socket // contains filtered or unexported fields }
func NewProtocolObject ¶
func NewProtocolObject(socketType int) *ProtocolObject
func (*ProtocolObject) Accept ¶
func (p *ProtocolObject) Accept() (*Socket, int)
func (*ProtocolObject) Append ¶
func (p *ProtocolObject) Append(s *Socket)
func (*ProtocolObject) Bind ¶
func (p *ProtocolObject) Bind(s *Socket)
func (*ProtocolObject) Close ¶
func (p *ProtocolObject) Close(s *Socket) int
func (*ProtocolObject) CloseAllofSockets ¶
func (p *ProtocolObject) CloseAllofSockets()
func (*ProtocolObject) CloseDevice ¶
func (p *ProtocolObject) CloseDevice()
func (*ProtocolObject) Connect ¶
func (p *ProtocolObject) Connect(targetIP net.IP, targetPort uint16, nexthopMAC net.HardwareAddr) (*Socket, error)
func (*ProtocolObject) InitAdapter ¶
func (p *ProtocolObject) InitAdapter(iftype int, param string) error
参数说明 iftype 获取接口的方式 IFObtainType_IP 指定接口目前的IP, IFObtainType_DevlnkName 指定接口的lnk名称(windows下为符号连接) param 就是根据不同类型传递的不同数据 pcap打开设备需要执行一个设备连接符号,这么做的目的是方便传递 没有直接指定MAC地址的原因是,不能直接获取到MAC地址
func (*ProtocolObject) IsInBufferSockets ¶
func (p *ProtocolObject) IsInBufferSockets(s *Socket) (*Socket, bool)
func (*ProtocolObject) RecvFrom ¶
func (p *ProtocolObject) RecvFrom(result *[]byte) int
func (*ProtocolObject) RemoveSockFromList ¶
func (p *ProtocolObject) RemoveSockFromList(s *Socket)
func (*ProtocolObject) Sendto ¶
func (p *ProtocolObject) Sendto(targetIP net.IP, targetPort uint16, nexthopMAC net.HardwareAddr, payload []byte) int
func (*ProtocolObject) SetTimeout ¶
func (p *ProtocolObject) SetTimeout(timeout time.Duration)
connect and send
func (*ProtocolObject) Startup ¶
func (p *ProtocolObject) Startup() error
func (*ProtocolObject) Wait ¶
func (p *ProtocolObject) Wait()
type Socket ¶
type Socket struct { Lock sync.RWMutex Family layers.ProtocolFamily SocketType int // 数据类型 Handle *device.DeviceHandle RemoteIP net.IP // 连接来源的IP RemotePort uint16 // 远程端口号 Nexthop net.HardwareAddr LocalIP net.IP LocalPort uint16 LocalMAC net.HardwareAddr TCPSock UDPSock // 保留 PreLenOfSent uint32 // 上一个发送的数据包长度 LenOfRecved uint32 // 接收的数据包长度 RecvedPayload []byte // 通知回调,触发通知 IsTriggerNotify atomic.Bool NotifyCallback func() DataBuf *utils.Buffer // contains filtered or unexported fields }
func CreateSocket ¶
func (*Socket) UpdateAckNum ¶
func (p *Socket) UpdateAckNum()
type TCPSock ¶
type TCPSock struct { Status int // TCP状态 // TCP 信息 SeqNum uint32 // 顺序号 AckNum uint32 // 确认序列号 RecvedSeqNum uint32 // 接收顺序号 RecvedAckNum uint32 // 确认序列号 DataOffset uint8 FIN, SYN, RST, PSH, ACK, URG, ECE, CWR, NS bool PreRecvedSignal int // 当前接收的信号 FIN/SYN/RST/PSH/ACK/URG/ECE/CWR/NS 分析后得到的信号 PreSentSignal int // FIN/SYN/RST/PSH/ACK/URG/ECE/CWR/NS 分析后得到的信号 Options []layers.TCPOption IsSupportTimestamp bool // 是否支持时间戳 TsEcho uint32 // 时间戳相关 MSS uint16 // 最大报文长度 WinSize uint16 // 窗口大小 RecvdWinSize uint16 // 接收窗口大小 }
Click to show internal directories.
Click to hide internal directories.