README

Project V

Build Status codecov.io GoDoc codebeat Downloads

Project V is a set of network tools that help you to build your own computer network. It secures your network connections and thus protects your privacy. See our website for more information.

License

The MIT License (MIT)

Credits

This repo relies on the following third-party projects:

Expand ▾ Collapse ▴

Documentation

Overview

    Package core provides an entry point to use V2Ray core functionalities.

    V2Ray makes it possible to accept incoming network connections with certain protocol, process the data, and send them through another connection with the same or a difference protocol on demand.

    It may be configured to work with multiple protocols at the same time, and uses the internal router to tunnel through different inbound and outbound connections.

    Index

    Constants

    This section is empty.

    Variables

    This section is empty.

    Functions

    func AddInboundHandler

    func AddInboundHandler(server *Instance, config *InboundHandlerConfig) error

    func AddOutboundHandler

    func AddOutboundHandler(server *Instance, config *OutboundHandlerConfig) error

    func CreateObject

    func CreateObject(v *Instance, config interface{}) (interface{}, error)

      CreateObject creates a new object based on the given V2Ray instance and config. The V2Ray instance may be nil.

      func Dial

      func Dial(ctx context.Context, v *Instance, dest net.Destination) (net.Conn, error)

        Dial provides an easy way for upstream caller to create net.Conn through V2Ray. It dispatches the request to the given destination by the given V2Ray instance. Since it is under a proxy context, the LocalAddr() and RemoteAddr() in returned net.Conn will not show real addresses being used for communication.

        v2ray:api:stable

        func DialUDP

        func DialUDP(ctx context.Context, v *Instance) (net.PacketConn, error)

          DialUDP provides a way to exchange UDP packets through V2Ray instance to remote servers. Since it is under a proxy context, the LocalAddr() in returned PacketConn will not show the real address.

          TODO: SetDeadline() / SetReadDeadline() / SetWriteDeadline() are not implemented.

          v2ray:api:beta

          func RegisterConfigLoader

          func RegisterConfigLoader(format *ConfigFormat) error

            RegisterConfigLoader add a new ConfigLoader.

            func RequireFeatures

            func RequireFeatures(ctx context.Context, callback interface{}) error

              RequireFeatures is a helper function to require features from Instance in context. See Instance.RequireFeatures for more information.

              func ServerType

              func ServerType() interface{}

                ServerType returns the type of the server.

                func Version

                func Version() string

                  Version returns V2Ray's version as a string, in the form of "x.y.z" where x, y and z are numbers. ".z" part may be omitted in regular releases.

                  func VersionStatement

                  func VersionStatement() []string

                    VersionStatement returns a list of strings representing the full version info.

                    Types

                    type Annotation

                    type Annotation struct {
                    	// API is for types or functions that can be used in other libs. Possible values are:
                    	//
                    	// * v2ray:api:beta for types or functions that are ready for use, but maybe changed in the future.
                    	// * v2ray:api:stable for types or functions with guarantee of backward compatibility.
                    	// * v2ray:api:deprecated for types or functions that should not be used anymore.
                    	//
                    	// Types or functions without api annotation should not be used externally.
                    	API string
                    }

                      Annotation is a concept in V2Ray. This struct is only for documentation. It is not used anywhere. Annotations begin with "v2ray:" in comment, as metadata of functions or types.

                      type Config

                      type Config struct {
                      	// Inbound handler configurations. Must have at least one item.
                      	Inbound []*InboundHandlerConfig `protobuf:"bytes,1,rep,name=inbound,proto3" json:"inbound,omitempty"`
                      	// Outbound handler configurations. Must have at least one item. The first item is used as default for routing.
                      	Outbound []*OutboundHandlerConfig `protobuf:"bytes,2,rep,name=outbound,proto3" json:"outbound,omitempty"`
                      	// App is for configurations of all features in V2Ray. A feature must implement the Feature interface, and its config type must be registered through common.RegisterConfig.
                      	App []*serial.TypedMessage `protobuf:"bytes,4,rep,name=app,proto3" json:"app,omitempty"`
                      	// Transport settings.
                      	// Deprecated. Each inbound and outbound should choose their own transport config.
                      	// Date to remove: 2020-01-13
                      	Transport *transport.Config `protobuf:"bytes,5,opt,name=transport,proto3" json:"transport,omitempty"` // Deprecated: Do not use.
                      	// Configuration for extensions. The config may not work if corresponding extension is not loaded into V2Ray.
                      	// V2Ray will ignore such config during initialization.
                      	Extension            []*serial.TypedMessage `protobuf:"bytes,6,rep,name=extension,proto3" json:"extension,omitempty"`
                      	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
                      	XXX_unrecognized     []byte                 `json:"-"`
                      	XXX_sizecache        int32                  `json:"-"`
                      }

                        Config is the master config of V2Ray. V2Ray takes this config as input and functions accordingly.

                        func LoadConfig

                        func LoadConfig(formatName string, filename string, input io.Reader) (*Config, error)

                          LoadConfig loads config with given format from given source.

                          func (*Config) Descriptor

                          func (*Config) Descriptor() ([]byte, []int)

                          func (*Config) GetApp

                          func (m *Config) GetApp() []*serial.TypedMessage

                          func (*Config) GetExtension

                          func (m *Config) GetExtension() []*serial.TypedMessage

                          func (*Config) GetInbound

                          func (m *Config) GetInbound() []*InboundHandlerConfig

                          func (*Config) GetOutbound

                          func (m *Config) GetOutbound() []*OutboundHandlerConfig

                          func (*Config) GetTransport

                          func (m *Config) GetTransport() *transport.Config

                            Deprecated: Do not use.

                            func (*Config) ProtoMessage

                            func (*Config) ProtoMessage()

                            func (*Config) Reset

                            func (m *Config) Reset()

                            func (*Config) String

                            func (m *Config) String() string

                            func (*Config) XXX_DiscardUnknown

                            func (m *Config) XXX_DiscardUnknown()

                            func (*Config) XXX_Marshal

                            func (m *Config) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

                            func (*Config) XXX_Merge

                            func (m *Config) XXX_Merge(src proto.Message)

                            func (*Config) XXX_Size

                            func (m *Config) XXX_Size() int

                            func (*Config) XXX_Unmarshal

                            func (m *Config) XXX_Unmarshal(b []byte) error

                            type ConfigFormat

                            type ConfigFormat struct {
                            	Name      string
                            	Extension []string
                            	Loader    ConfigLoader
                            }

                              ConfigFormat is a configurable format of V2Ray config file.

                              type ConfigLoader

                              type ConfigLoader func(input io.Reader) (*Config, error)

                                ConfigLoader is a utility to load V2Ray config from external source.

                                type InboundHandlerConfig

                                type InboundHandlerConfig struct {
                                	// Tag of the inbound handler. The tag must be unique among all inbound handlers
                                	Tag string `protobuf:"bytes,1,opt,name=tag,proto3" json:"tag,omitempty"`
                                	// Settings for how this inbound proxy is handled.
                                	ReceiverSettings *serial.TypedMessage `protobuf:"bytes,2,opt,name=receiver_settings,json=receiverSettings,proto3" json:"receiver_settings,omitempty"`
                                	// Settings for inbound proxy. Must be one of the inbound proxies.
                                	ProxySettings        *serial.TypedMessage `protobuf:"bytes,3,opt,name=proxy_settings,json=proxySettings,proto3" json:"proxy_settings,omitempty"`
                                	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
                                	XXX_unrecognized     []byte               `json:"-"`
                                	XXX_sizecache        int32                `json:"-"`
                                }

                                  InboundHandlerConfig is the configuration for inbound handler.

                                  func (*InboundHandlerConfig) Descriptor

                                  func (*InboundHandlerConfig) Descriptor() ([]byte, []int)

                                  func (*InboundHandlerConfig) GetProxySettings

                                  func (m *InboundHandlerConfig) GetProxySettings() *serial.TypedMessage

                                  func (*InboundHandlerConfig) GetReceiverSettings

                                  func (m *InboundHandlerConfig) GetReceiverSettings() *serial.TypedMessage

                                  func (*InboundHandlerConfig) GetTag

                                  func (m *InboundHandlerConfig) GetTag() string

                                  func (*InboundHandlerConfig) ProtoMessage

                                  func (*InboundHandlerConfig) ProtoMessage()

                                  func (*InboundHandlerConfig) Reset

                                  func (m *InboundHandlerConfig) Reset()

                                  func (*InboundHandlerConfig) String

                                  func (m *InboundHandlerConfig) String() string

                                  func (*InboundHandlerConfig) XXX_DiscardUnknown

                                  func (m *InboundHandlerConfig) XXX_DiscardUnknown()

                                  func (*InboundHandlerConfig) XXX_Marshal

                                  func (m *InboundHandlerConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

                                  func (*InboundHandlerConfig) XXX_Merge

                                  func (m *InboundHandlerConfig) XXX_Merge(src proto.Message)

                                  func (*InboundHandlerConfig) XXX_Size

                                  func (m *InboundHandlerConfig) XXX_Size() int

                                  func (*InboundHandlerConfig) XXX_Unmarshal

                                  func (m *InboundHandlerConfig) XXX_Unmarshal(b []byte) error

                                  type Instance

                                  type Instance struct {
                                  	// contains filtered or unexported fields
                                  }

                                    Instance combines all functionalities in V2Ray.

                                    func FromContext

                                    func FromContext(ctx context.Context) *Instance

                                      FromContext returns an Instance from the given context, or nil if the context doesn't contain one.

                                      func MustFromContext

                                      func MustFromContext(ctx context.Context) *Instance

                                        MustFromContext returns an Instance from the given context, or panics if not present.

                                        func New

                                        func New(config *Config) (*Instance, error)

                                          New returns a new V2Ray instance based on given configuration. The instance is not started at this point. To ensure V2Ray instance works properly, the config must contain one Dispatcher, one InboundHandlerManager and one OutboundHandlerManager. Other features are optional.

                                          func StartInstance

                                          func StartInstance(configFormat string, configBytes []byte) (*Instance, error)

                                            StartInstance starts a new V2Ray instance with given serialized config. By default V2Ray only support config in protobuf format, i.e., configFormat = "protobuf". Caller need to load other packages to add JSON support.

                                            v2ray:api:stable

                                            func (*Instance) AddFeature

                                            func (s *Instance) AddFeature(feature features.Feature) error

                                              AddFeature registers a feature into current Instance.

                                              func (*Instance) Close

                                              func (s *Instance) Close() error

                                                Close shutdown the V2Ray instance.

                                                func (*Instance) GetFeature

                                                func (s *Instance) GetFeature(featureType interface{}) features.Feature

                                                  GetFeature returns a feature of the given type, or nil if such feature is not registered.

                                                  func (*Instance) RequireFeatures

                                                  func (s *Instance) RequireFeatures(callback interface{}) error

                                                    RequireFeatures registers a callback, which will be called when all dependent features are registered. The callback must be a func(). All its parameters must be features.Feature.

                                                    func (*Instance) Start

                                                    func (s *Instance) Start() error

                                                      Start starts the V2Ray instance, including all registered features. When Start returns error, the state of the instance is unknown. A V2Ray instance can be started only once. Upon closing, the instance is not guaranteed to start again.

                                                      v2ray:api:stable

                                                      func (*Instance) Type

                                                      func (s *Instance) Type() interface{}

                                                        Type implements common.HasType.

                                                        type OutboundHandlerConfig

                                                        type OutboundHandlerConfig struct {
                                                        	// Tag of this outbound handler.
                                                        	Tag string `protobuf:"bytes,1,opt,name=tag,proto3" json:"tag,omitempty"`
                                                        	// Settings for how to dial connection for this outbound handler.
                                                        	SenderSettings *serial.TypedMessage `protobuf:"bytes,2,opt,name=sender_settings,json=senderSettings,proto3" json:"sender_settings,omitempty"`
                                                        	// Settings for this outbound proxy. Must be one of the outbound proxies.
                                                        	ProxySettings *serial.TypedMessage `protobuf:"bytes,3,opt,name=proxy_settings,json=proxySettings,proto3" json:"proxy_settings,omitempty"`
                                                        	// If not zero, this outbound will be expired in seconds. Not used for now.
                                                        	Expire int64 `protobuf:"varint,4,opt,name=expire,proto3" json:"expire,omitempty"`
                                                        	// Comment of this outbound handler. Not used for now.
                                                        	Comment              string   `protobuf:"bytes,5,opt,name=comment,proto3" json:"comment,omitempty"`
                                                        	XXX_NoUnkeyedLiteral struct{} `json:"-"`
                                                        	XXX_unrecognized     []byte   `json:"-"`
                                                        	XXX_sizecache        int32    `json:"-"`
                                                        }

                                                          OutboundHandlerConfig is the configuration for outbound handler.

                                                          func (*OutboundHandlerConfig) Descriptor

                                                          func (*OutboundHandlerConfig) Descriptor() ([]byte, []int)

                                                          func (*OutboundHandlerConfig) GetComment

                                                          func (m *OutboundHandlerConfig) GetComment() string

                                                          func (*OutboundHandlerConfig) GetExpire

                                                          func (m *OutboundHandlerConfig) GetExpire() int64

                                                          func (*OutboundHandlerConfig) GetProxySettings

                                                          func (m *OutboundHandlerConfig) GetProxySettings() *serial.TypedMessage

                                                          func (*OutboundHandlerConfig) GetSenderSettings

                                                          func (m *OutboundHandlerConfig) GetSenderSettings() *serial.TypedMessage

                                                          func (*OutboundHandlerConfig) GetTag

                                                          func (m *OutboundHandlerConfig) GetTag() string

                                                          func (*OutboundHandlerConfig) ProtoMessage

                                                          func (*OutboundHandlerConfig) ProtoMessage()

                                                          func (*OutboundHandlerConfig) Reset

                                                          func (m *OutboundHandlerConfig) Reset()

                                                          func (*OutboundHandlerConfig) String

                                                          func (m *OutboundHandlerConfig) String() string

                                                          func (*OutboundHandlerConfig) XXX_DiscardUnknown

                                                          func (m *OutboundHandlerConfig) XXX_DiscardUnknown()

                                                          func (*OutboundHandlerConfig) XXX_Marshal

                                                          func (m *OutboundHandlerConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

                                                          func (*OutboundHandlerConfig) XXX_Merge

                                                          func (m *OutboundHandlerConfig) XXX_Merge(src proto.Message)

                                                          func (*OutboundHandlerConfig) XXX_Size

                                                          func (m *OutboundHandlerConfig) XXX_Size() int

                                                          func (*OutboundHandlerConfig) XXX_Unmarshal

                                                          func (m *OutboundHandlerConfig) XXX_Unmarshal(b []byte) error

                                                          type Server

                                                          type Server interface {
                                                          	common.Runnable
                                                          }

                                                            Server is an instance of V2Ray. At any time, there must be at most one Server instance running.

                                                            Directories

                                                            Path Synopsis
                                                            app
                                                            Package app contains feature implementations of V2Ray.
                                                            Package app contains feature implementations of V2Ray.
                                                            dns
                                                            Package dns is an implementation of core.DNS feature.
                                                            Package dns is an implementation of core.DNS feature.
                                                            log
                                                            policy
                                                            Package policy is an implementation of policy.Manager feature.
                                                            Package policy is an implementation of policy.Manager feature.
                                                            proxyman
                                                            Package proxyman defines applications for managing inbound and outbound proxies.
                                                            Package proxyman defines applications for managing inbound and outbound proxies.
                                                            Package common contains common utilities that are shared among other packages.
                                                            Package common contains common utilities that are shared among other packages.
                                                            buf
                                                            Package buf provides a light-weight memory allocation mechanism.
                                                            Package buf provides a light-weight memory allocation mechanism.
                                                            crypto
                                                            Package crypto provides common crypto libraries for V2Ray.
                                                            Package crypto provides common crypto libraries for V2Ray.
                                                            dice
                                                            Package dice contains common functions to generate random number.
                                                            Package dice contains common functions to generate random number.
                                                            errors
                                                            Package errors is a drop-in replacement for Golang lib 'errors'.
                                                            Package errors is a drop-in replacement for Golang lib 'errors'.
                                                            log
                                                            mux
                                                            net
                                                            Package net is a drop-in replacement to Golang's net package, with some more functionalities.
                                                            Package net is a drop-in replacement to Golang's net package, with some more functionalities.
                                                            session
                                                            Package session provides functions for sessions of incoming requests.
                                                            Package session provides functions for sessions of incoming requests.
                                                            external
                                                            github.com/cheekybits/genny/generic
                                                            Package generic contains the generic marker types.
                                                            Package generic contains the generic marker types.
                                                            github.com/gorilla/websocket
                                                            Package websocket implements the WebSocket protocol defined in RFC 6455.
                                                            Package websocket implements the WebSocket protocol defined in RFC 6455.
                                                            github.com/marten-seemann/qtls
                                                            Package tls partially implements TLS 1.2, as specified in RFC 5246.
                                                            Package tls partially implements TLS 1.2, as specified in RFC 5246.
                                                            github.com/refraction-networking/utls
                                                            Package tls partially implements TLS 1.2, as specified in RFC 5246, and TLS 1.3, as specified in RFC 8446.
                                                            Package tls partially implements TLS 1.2, as specified in RFC 5246, and TLS 1.3, as specified in RFC 8446.
                                                            github.com/refraction-networking/utls/cpu
                                                            Package cpu implements processor feature detection used by the Go standard library.
                                                            Package cpu implements processor feature detection used by the Go standard library.
                                                            dns
                                                            infra
                                                            Package proxy contains all proxies used by V2Ray.
                                                            Package proxy contains all proxies used by V2Ray.
                                                            dns
                                                            shadowsocks
                                                            Package shadowsocks provides compatible functionality to Shadowsocks.
                                                            Package shadowsocks provides compatible functionality to Shadowsocks.
                                                            socks
                                                            Package socks provides implements of Socks protocol 4, 4a and 5.
                                                            Package socks provides implements of Socks protocol 4, 4a and 5.
                                                            vmess
                                                            Package vmess contains the implementation of VMess protocol and transportation.
                                                            Package vmess contains the implementation of VMess protocol and transportation.
                                                            testing
                                                            mocks
                                                            Package mocks is a generated GoMock package.
                                                            Package mocks is a generated GoMock package.
                                                            internet/kcp
                                                            Package kcp - A Fast and Reliable ARQ Protocol Acknowledgement: skywind3000@github for inventing the KCP protocol xtaci@github for translating to Golang
                                                            Package kcp - A Fast and Reliable ARQ Protocol Acknowledgement: skywind3000@github for inventing the KCP protocol xtaci@github for translating to Golang
                                                            internet/websocket
                                                            Package websocket implements Websocket transport Websocket transport implements an HTTP(S) compliable, surveillance proof transport method with plausible deniability.
                                                            Package websocket implements Websocket transport Websocket transport implements an HTTP(S) compliable, surveillance proof transport method with plausible deniability.