phantomtcp

package
v0.0.0-...-9918f3d Latest Latest
Warning

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

Go to latest
Published: Oct 9, 2022 License: LGPL-3.0 Imports: 21 Imported by: 2

Documentation

Index

Constants

View Source
const (
	DIRECT    = 0x0
	REDIRECT  = 0x1
	NAT64     = 0x2
	HTTP      = 0x3
	HTTPS     = 0x4
	SOCKS4    = 0x5
	SOCKS5    = 0x6
	WIREGUARD = 0x7
)
View Source
const (
	OPT_NONE = 0x0

	OPT_TTL   = 0x1 << 0
	OPT_MSS   = 0x1 << 1
	OPT_WMD5  = 0x1 << 2
	OPT_NACK  = 0x1 << 3
	OPT_WACK  = 0x1 << 4
	OPT_WCSUM = 0x1 << 5
	OPT_WSEQ  = 0x1 << 6
	OPT_WTIME = 0x1 << 7

	OPT_TFO   = 0x1 << 8
	OPT_UDP   = 0x1 << 9
	OPT_NOTCP = 0x1 << 10
	OPT_DELAY = 0x1 << 11

	OPT_MODE2     = 0x1 << 12
	OPT_DF        = 0x1 << 13
	OPT_SAT       = 0x1 << 14
	OPT_RAND      = 0x1 << 15
	OPT_SSEG      = 0x1 << 16
	OPT_1SEG      = 0x1 << 17
	OPT_HTFO      = 0x1 << 18
	OPT_KEEPALIVE = 0x1 << 19
	OPT_SYNX2     = 0x1 << 20
	OPT_ZERO      = 0x1 << 21

	OPT_HTTP     = 0x1 << 23
	OPT_HTTPS    = 0x1 << 24
	OPT_HTTP3    = 0x1 << 25
	OPT_MOVE     = 0x1 << 26
	OPT_STRIP    = 0x1 << 27
	OPT_FRONTING = 0x1 << 28

	OPT_IPV4 = 0x1 << 30
	OPT_IPV6 = 0x1 << 31
)
View Source
const (
	SO_ORIGINAL_DST      = 80
	IP6T_SO_ORIGINAL_DST = 80
)
View Source
const OPT_MODIFY = OPT_FAKE | OPT_SSEG | OPT_TFO | OPT_HTFO | OPT_MODE2

Variables

View Source
var ConnInfo4 [65536]chan *ConnectionInfo
View Source
var ConnInfo6 [65536]chan *ConnectionInfo
View Source
var ConnSyn sync.Map
View Source
var DNSCache sync.Map
View Source
var DNSMinTTL uint32 = 0
View Source
var DomainMap map[string]*PhantomInterface
View Source
var Forward bool = false
View Source
var HintMap = map[string]uint32{
	"none":   OPT_NONE,
	"ttl":    OPT_TTL,
	"mss":    OPT_MSS,
	"w-md5":  OPT_WMD5,
	"n-ack":  OPT_NACK,
	"w-ack":  OPT_WACK,
	"w-csum": OPT_WCSUM,
	"w-seq":  OPT_WSEQ,
	"w-time": OPT_WTIME,

	"tfo":    OPT_TFO,
	"udp":    OPT_UDP,
	"no-tcp": OPT_NOTCP,
	"delay":  OPT_DELAY,

	"mode2":      OPT_MODE2,
	"df":         OPT_DF,
	"sat":        OPT_SAT,
	"rand":       OPT_RAND,
	"s-seg":      OPT_SSEG,
	"1-seg":      OPT_1SEG,
	"half-tfo":   OPT_HTFO,
	"keep-alive": OPT_KEEPALIVE,
	"synx2":      OPT_SYNX2,
	"zero":       OPT_ZERO,

	"http":     OPT_HTTP,
	"https":    OPT_HTTPS,
	"h3":       OPT_HTTP3,
	"move":     OPT_MOVE,
	"strip":    OPT_STRIP,
	"fronting": OPT_FRONTING,

	"ipv4": OPT_IPV4,
	"ipv6": OPT_IPV6,
}
View Source
var InterfaceMap map[string]PhantomInterface
View Source
var LogLevel = 0
View Source
var Logger *log.Logger
View Source
var Nose []string = []string{"phantom.socks"}
View Source
var NoseLock sync.Mutex
View Source
var PassiveMode = false
View Source
var SubdomainDepth = 2
View Source
var TFOCookies sync.Map
View Source
var TFOPayload [64][]byte
View Source
var TFOSynID uint8 = 0
View Source
var VirtualAddrPrefix byte = 255

Functions

func AddConn

func AddConn(synAddr string, option uint32)

func ComputeUDPChecksum

func ComputeUDPChecksum(buffer []byte) uint16

func ConnectionMonitor

func ConnectionMonitor(devices []string) bool

func CreateInterfaces

func CreateInterfaces(Interfaces []InterfaceConfig) []string

func DNSTCPServer

func DNSTCPServer(client net.Conn)

func DelConn

func DelConn(synAddr string)

func DevicePrint

func DevicePrint()

func DialUDP

func DialUDP(address string) (net.Conn, error)

func GetAddressFromInterface

func GetAddressFromInterface(iface string, ipv6 bool) (string, error)

func GetHost

func GetHost(b []byte) (offset int, length int)

func GetLocalAddr

func GetLocalAddr(name string, ipv6 bool) (*net.TCPAddr, error)

func GetName

func GetName(buf []byte, offset int) (string, int)

func GetNameOffset

func GetNameOffset(response []byte, offset int) int

func GetOriginalDST

func GetOriginalDST(conn *net.TCPConn) (*net.TCPAddr, error)

func GetPAC

func GetPAC(address string) string

func GetQName

func GetQName(buf []byte) (string, int, int)

func GetQUICSNI

func GetQUICSNI(b []byte) string

func GetQUICVersion

func GetQUICVersion(data []byte) uint32

func GetSNI

func GetSNI(b []byte) (offset int, length int)

func HTTPSlookup

func HTTPSlookup(request []byte, u *url.URL, domain string) ([]byte, error)

func HttpMove

func HttpMove(conn net.Conn, host string, b []byte) bool

func IsAddressInUse

func IsAddressInUse(err error) bool

func IsIPv6

func IsIPv6(addr string) bool

func IsNormalError

func IsNormalError(err error) bool

func ListenUDP

func ListenUDP(address string) (*net.UDPConn, error)

func LoadConfig

func LoadConfig(filename string) error

func LoadHosts

func LoadHosts(filename string) error

func ModifyAndSendPacket

func ModifyAndSendPacket(connInfo *ConnectionInfo, payload []byte, hint uint32, ttl uint8, count int) error

func NSLookup

func NSLookup(name string, hint uint32, server string) (int, []net.IP)

func NSRequest

func NSRequest(request []byte, cache bool) (int, []byte)

func PackQName

func PackQName(name string) []byte

func PackRequest

func PackRequest(name string, qtype uint16, id uint16, ecs string) []byte

func QUICProxy

func QUICProxy(address string)

func ReadAtLeast

func ReadAtLeast()

func Redirect

func Redirect(dst string, to_port int, forward bool)

func RedirectDNS

func RedirectDNS()

func RedirectProxy

func RedirectProxy(client net.Conn)

func SNIProxy

func SNIProxy(client net.Conn)

func SendWithOption

func SendWithOption(conn net.Conn, payload []byte, tos int, ttl int) error

func SocksProxy

func SocksProxy(client net.Conn)

func SocksUDPProxy

func SocksUDPProxy(address string)

func StoreDNSCache

func StoreDNSCache(qname string, record *DNSRecords)

func TCPMapping

func TCPMapping(Address string, Hosts string) error

func TCPlookup

func TCPlookup(request []byte, address string, server *PhantomInterface) ([]byte, error)

func TCPlookupDNS64

func TCPlookupDNS64(request []byte, address string, offset int, prefix []byte) ([]byte, error)

func TFOlookup

func TFOlookup(request []byte, address string) ([]byte, error)

func TLSlookup

func TLSlookup(request []byte, address string) ([]byte, error)

func TProxyUDP

func TProxyUDP(address string)

func UDPMapping

func UDPMapping(Address, Host string) error

func UDPlookup

func UDPlookup(request []byte, address string) ([]byte, error)

Types

type ConnectionInfo

type ConnectionInfo struct {
	Link gopacket.LinkLayer
	IP   gopacket.NetworkLayer
	TCP  layers.TCP
}

func DialConnInfo

func DialConnInfo(laddr, raddr *net.TCPAddr, server *PhantomInterface, payload []byte) (net.Conn, *ConnectionInfo, error)

type DNSRecords

type DNSRecords struct {
	Index int
	Hint  uint
	A     *RecordAddresses
	AAAA  *RecordAddresses
}

func LoadDNSCache

func LoadDNSCache(qname string) *DNSRecords

func (DNSRecords) BuildResponse

func (records DNSRecords) BuildResponse(request []byte, qtype int, ttl uint32) []byte

type InterfaceConfig

type InterfaceConfig struct {
	Name   string `json:"name,omitempty"`
	Device string `json:"device,omitempty"`
	DNS    string `json:"dns,omitempty"`
	Hint   string `json:"hint,omitempty"`
	MTU    int    `json:"mtu,omitempty"`
	TTL    int    `json:"ttl,omitempty"`
	MAXTTL int    `json:"maxttl,omitempty"`

	Protocol   string `json:"protocol,omitempty"`
	Address    string `json:"address,omitempty"`
	PrivateKey string `json:"privatekey,omitempty"`

	Peers []Peer `json:"peers,omitempty"`
}

func (InterfaceConfig) StartClient

func (config InterfaceConfig) StartClient() error

type Peer

type Peer struct {
	PublicKey    string `json:"publickey,omitempty"`
	PreSharedKey string `json:"presharedkey,omitempty"`
	Endpoint     string `json:"endpoint,omitempty"`
	KeepAlive    int    `json:"keepalive,omitempty"`
	AllowedIPs   string `json:"allowedips,omitempty"`
}

type PhantomInterface

type PhantomInterface struct {
	Device string
	DNS    string
	Hint   uint32
	MTU    uint16
	TTL    byte
	MAXTTL byte

	Protocol byte
	Address  string
}
var DefaultInterface *PhantomInterface = nil

func ConfigLookup

func ConfigLookup(name string) *PhantomInterface

func GetConfig

func GetConfig(name string) *PhantomInterface

func (*PhantomInterface) Dial

func (pface *PhantomInterface) Dial(host string, port int, b []byte) (net.Conn, *ConnectionInfo, error)

func (*PhantomInterface) DialStrip

func (pface *PhantomInterface) DialStrip(host string, fronting string) (*tls.Conn, error)

func (*PhantomInterface) DialTCP

func (pface *PhantomInterface) DialTCP(address *net.TCPAddr) (net.Conn, error)

func (*PhantomInterface) DialUDP

func (pface *PhantomInterface) DialUDP(address *net.UDPAddr) (net.Conn, error)

func (*PhantomInterface) DialUDPProxy

func (pface *PhantomInterface) DialUDPProxy(host string, port int) (net.Conn, net.Conn, error)

func (*PhantomInterface) GetRemoteAddresses

func (server *PhantomInterface) GetRemoteAddresses(host string, port int) ([]*net.TCPAddr, error)

func (*PhantomInterface) Keep

func (server *PhantomInterface) Keep(client, conn net.Conn, connInfo *ConnectionInfo)

func (*PhantomInterface) ProxyHandshake

func (server *PhantomInterface) ProxyHandshake(conn net.Conn, synpacket *ConnectionInfo, host string, port int) error

func (*PhantomInterface) ResolveTCPAddr

func (server *PhantomInterface) ResolveTCPAddr(host string, port int) (*net.TCPAddr, error)

func (*PhantomInterface) ResolveTCPAddrs

func (server *PhantomInterface) ResolveTCPAddrs(host string, port int) ([]*net.TCPAddr, error)

type RecordAddresses

type RecordAddresses struct {
	TTL       int64
	Addresses []net.IP
}

type ServerOptions

type ServerOptions struct {
	ECS    string
	Type   string
	PD     string
	Domain string
}

func ParseOptions

func ParseOptions(options string) ServerOptions

type ServiceConfig

type ServiceConfig struct {
	Name       string `json:"name,omitempty"`
	Device     string `json:"device,omitempty"`
	MTU        int    `json:"mtu,omitempty"`
	Protocol   string `json:"protocol,omitempty"`
	Address    string `json:"address,omitempty"`
	PrivateKey string `json:"privatekey,omitempty"`

	Peers []Peer `json:"peers,omitempty"`
}

func (ServiceConfig) StartService

func (config ServiceConfig) StartService()

type SynInfo

type SynInfo struct {
	Number uint32
	Option uint32
}

type WireGuardInterface

type WireGuardInterface struct {
	PhantomInterface
}

type WireGuardInterfaceConfig

type WireGuardInterfaceConfig struct {
	InterfaceConfig
}

type WireGuardServiceConfig

type WireGuardServiceConfig struct {
	ServiceConfig
}

Jump to

Keyboard shortcuts

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