engine

package
v1.0.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 23, 2025 License: Apache-2.0 Imports: 9 Imported by: 0

Documentation

Index

Constants

View Source
const (
	NatTypeSymmetric = 0 // 对称型
	NatTypeFullCone  = 1 // 完全圆锥型
)
View Source
const (
	LanToWan = iota
	WanToLan
)

Variables

View Source
var (
	BROADCAST_MAC_ADDR = []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
)
View Source
var (
	DefaultLogWriter io.Writer = nil
)

Functions

func Log added in v1.0.6

func Log(msg string)

func ParseIpAddr

func ParseIpAddr(ipAddrStr string) ([]byte, error)

func ParseMacAddr

func ParseMacAddr(macAddrStr string) ([]byte, error)

Types

type Config

type Config struct {
	DebugLog     bool                  // 调试日志
	NetIfList    []*NetIfConfig        // 网卡列表
	RoutingTable []*RoutingEntryConfig // 路由表
}

type Engine

type Engine struct {
	DebugLog       bool                                              // 调试日志
	Stop           bool                                              // 停止标志
	NetIfMap       map[string]*NetIf                                 // 网络接口集合 key:接口名 value:接口实例
	RoutingTable   []*RoutingEntry                                   // 路由表
	Ipv4PktFwdHook func(raw []byte, dir int) (drop bool, mod []byte) // ip报文转发钩子
}

func InitEngine

func InitEngine(config *Config) (*Engine, error)

func (*Engine) GetNetIf

func (e *Engine) GetNetIf(name string) *NetIf

func (*Engine) RunEngine

func (e *Engine) RunEngine()

func (*Engine) StopEngine

func (e *Engine) StopEngine()

type NatFlow added in v1.0.3

type NatFlow struct {
	NatFlowHash   NatFlowHash // nat流唯一标识
	RemoteIpAddr  uint32      // 远程ip地址
	RemotePort    uint16      // 远程端口
	WanIpAddr     uint32      // wan口ip地址
	WanPort       uint16      // wan口端口
	LanHostIpAddr uint32      // lan口主机ip地址
	LanHostPort   uint16      // lan口主机端口
	LastAliveTime uint32      // 上一次活跃时间
}

type NatFlowHash added in v1.0.3

type NatFlowHash struct {
	RemoteIpAddr  uint32 // 远程ip地址
	RemotePort    uint16 // 远程端口
	LanHostIpAddr uint32 // lan口主机ip地址
	LanHostPort   uint16 // lan口主机端口
}

func (NatFlowHash) String added in v1.0.3

func (f NatFlowHash) String() string

type NatPortMappingEntry added in v1.0.6

type NatPortMappingEntry struct {
	WanIpAddr     uint32 // wan口ip地址
	WanPort       uint16 // wan口端口
	LanHostIpAddr uint32 // lan口主机ip地址
	LanHostPort   uint16 // lan口主机端口
}

type NatPortMappingEntryConfig added in v1.0.6

type NatPortMappingEntryConfig struct {
	WanIpAddr     string // wan口ip地址
	WanPort       uint16 // wan口端口
	LanHostIpAddr string // lan口主机ip地址
	LanHostPort   uint16 // lan口主机端口
}

type NatWanFlowHash added in v1.0.6

type NatWanFlowHash struct {
	RemoteIpAddr uint32 // 远程ip地址
	RemotePort   uint16 // 远程端口
	WanIpAddr    uint32 // wan口ip地址
	WanPort      uint16 // wan口端口
}

type NetIf

type NetIf struct {
	Name                string                      // 接口名
	MacAddr             []byte                      // mac地址
	IpAddr              []byte                      // ip地址
	NetworkMask         []byte                      // 子网掩码
	EthRxChan           chan []byte                 // 物理层接收管道
	EthTxChan           chan []byte                 // 物理层发送管道
	LoChan              chan []byte                 // 本地回环管道
	Engine              *Engine                     // 归属Engine指针
	ArpCacheTable       map[uint32]uint64           // arp缓存表 key:ip value:mac
	ArpCacheTableLock   sync.RWMutex                // arp缓存表锁
	NatEnable           bool                        // 是否开启nat
	NatType             int                         // nat类型
	NatWanFlowTable     map[NatWanFlowHash]*NatFlow // wan口回程包nat流映射表
	NatFlowTable        map[NatFlowHash]*NatFlow    // nat流表
	NatPortAlloc        map[uint32]*PortAlloc       // nat端口分配表 key:目的ip value:端口分配信息
	NatPortMappingTable []*NatPortMappingEntry      // 网络地址转换端口映射表
	NatTableLock        sync.RWMutex                // nat表锁
	HandleUdp           func(udpPayload []byte, udpSrcPort uint16, udpDstPort uint16, ipv4SrcAddr []byte)
}

func (*NetIf) FindRoute added in v1.0.3

func (i *NetIf) FindRoute(ipv4DstAddr []byte) (nextHopIpAddr []byte, outNetIfName string)

func (*NetIf) GetArpCache

func (i *NetIf) GetArpCache(ipAddr []byte) (macAddr []byte)

func (*NetIf) HandleArp

func (i *NetIf) HandleArp(ethPayload []byte, ethSrcMac []byte)

func (*NetIf) MacAddrToU added in v1.0.1

func (i *NetIf) MacAddrToU(macAddr []byte) (macAddrU uint64)

func (*NetIf) NatAddFlow added in v1.0.3

func (i *NetIf) NatAddFlow(lanHostAddr []byte, remoteAddr []byte, lanHostPort uint16, remotePort uint16) *NatFlow

func (*NetIf) NatGetFlowByHash added in v1.0.3

func (i *NetIf) NatGetFlowByHash(natFlowHash NatFlowHash) *NatFlow

func (*NetIf) NatGetFlowByWan added in v1.0.3

func (i *NetIf) NatGetFlowByWan(remoteIpAddr []byte, remotePort uint16, wanIpAddr []byte, wanPort uint16) *NatFlow

func (*NetIf) NatTableClear added in v1.0.2

func (i *NetIf) NatTableClear()

func (*NetIf) PacketHandle

func (i *NetIf) PacketHandle()

func (*NetIf) RxEthernet added in v1.0.1

func (i *NetIf) RxEthernet(ethFrm []byte)

func (*NetIf) RxIcmp

func (i *NetIf) RxIcmp(ipv4Payload []byte, ipv4SrcAddr []byte)

func (*NetIf) RxIpv4

func (i *NetIf) RxIpv4(ethPayload []byte)

func (*NetIf) RxTcp

func (i *NetIf) RxTcp()

func (*NetIf) RxUdp

func (i *NetIf) RxUdp(ipv4Payload []byte, ipv4SrcAddr []byte)

func (*NetIf) SendFreeArp added in v1.0.6

func (i *NetIf) SendFreeArp()

func (*NetIf) SendUdpPktByFlow added in v1.0.3

func (i *NetIf) SendUdpPktByFlow(natFlowHash NatFlowHash, dir int, udpPayload []byte)

func (*NetIf) SetArpCache

func (i *NetIf) SetArpCache(ipAddr []byte, macAddr []byte)

func (*NetIf) TxEthernet added in v1.0.1

func (i *NetIf) TxEthernet(ethPayload []byte, ethDstMac []byte, ethProto uint16) []byte

func (*NetIf) TxIcmp

func (i *NetIf) TxIcmp(icmpPayload []byte, seq uint16, ipv4DstAddr []byte) []byte

func (*NetIf) TxIpv4

func (i *NetIf) TxIpv4(ipv4Payload []byte, ipv4HeadProto uint8, ipv4DstAddr []byte) []byte

func (*NetIf) TxTcpAck

func (i *NetIf) TxTcpAck(tcpSrcPort uint16, tcpDstPort uint16, ipv4DstAddr []byte) []byte

func (*NetIf) TxTcpSyn

func (i *NetIf) TxTcpSyn(tcpSrcPort uint16, tcpDstPort uint16, ipv4DstAddr []byte) []byte

func (*NetIf) TxTcpSynAck

func (i *NetIf) TxTcpSynAck(tcpSrcPort uint16, tcpDstPort uint16, ipv4DstAddr []byte) []byte

func (*NetIf) TxUdp

func (i *NetIf) TxUdp(udpPayload []byte, udpSrcPort uint16, udpDstPort uint16, ipv4DstAddr []byte) []byte

func (*NetIf) UToMacAddr added in v1.0.1

func (i *NetIf) UToMacAddr(macAddrU uint64) (macAddr []byte)

type NetIfConfig

type NetIfConfig struct {
	Name                string                       // 网卡名
	MacAddr             string                       // mac地址
	IpAddr              string                       // ip地址
	NetworkMask         string                       // 子网掩码
	NatEnable           bool                         // 网络地址转换
	NatType             int                          // 网络地址转换类型
	NatPortMappingTable []*NatPortMappingEntryConfig // 网络地址转换端口映射表
	EthRxChan           chan []byte                  // 物理层接收管道
	EthTxChan           chan []byte                  // 物理层发送管道
}

type PortAlloc added in v1.0.2

type PortAlloc struct {
	Lock          sync.RWMutex        // 锁
	AllocPortMap  map[SrcAddr]uint16  // 分配端口集合 key:源地址 value:端口
	RemainPortMap map[uint16]struct{} // 剩余端口集合 key:端口
}

type RoutingEntry added in v1.0.1

type RoutingEntry struct {
	DstIpAddr   []byte // 目的ip地址
	NetworkMask []byte // 网络掩码
	NextHop     []byte // 下一跳
	NetIf       string // 出接口
}

type RoutingEntryConfig added in v1.0.1

type RoutingEntryConfig struct {
	DstIpAddr   string // 目的ip地址
	NetworkMask string // 网络掩码
	NextHop     string // 下一跳
	NetIf       string // 出接口
}

type SrcAddr added in v1.0.2

type SrcAddr struct {
	IpAddr uint32 // ip地址
	Port   uint16 // 端口
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL