socks-0.5.6: Socks proxy (ver 5)

LicenseBSD-style
MaintainerVincent Hanquez <vincent@snarc.org>
Stabilityexperimental
Portabilityunknown
Safe HaskellNone
LanguageHaskell2010

Network.Socks5

Contents

Description

This is an implementation of SOCKS5 as defined in RFC 1928

In Wikipedia's words:

SOCKet Secure (SOCKS) is an Internet protocol that routes network packets between a client and server through a proxy server. SOCKS5 additionally provides authentication so only authorized users may access a server. Practically, a SOCKS server will proxy TCP connections to an arbitrary IP address as well as providing a means for UDP packets to be forwarded.

BIND and UDP ASSOCIATE messages are not implemented. However main usage of SOCKS is covered in this implementation.

Synopsis

Types

data SocksReply #

Type of reply on the SOCKS protocol

Instances
Enum SocksReply # 
Instance details

Defined in Network.Socks5.Types

Eq SocksReply # 
Instance details

Defined in Network.Socks5.Types

Data SocksReply # 
Instance details

Defined in Network.Socks5.Types

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> SocksReply -> c SocksReply #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c SocksReply #

toConstr :: SocksReply -> Constr #

dataTypeOf :: SocksReply -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c SocksReply) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c SocksReply) #

gmapT :: (forall b. Data b => b -> b) -> SocksReply -> SocksReply #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> SocksReply -> r #

gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> SocksReply -> r #

gmapQ :: (forall d. Data d => d -> u) -> SocksReply -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> SocksReply -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> SocksReply -> m SocksReply #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> SocksReply -> m SocksReply #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> SocksReply -> m SocksReply #

Ord SocksReply # 
Instance details

Defined in Network.Socks5.Types

Show SocksReply # 
Instance details

Defined in Network.Socks5.Types

data SocksError #

SOCKS error that can be received or sent

Instances
Enum SocksError # 
Instance details

Defined in Network.Socks5.Types

Eq SocksError # 
Instance details

Defined in Network.Socks5.Types

Data SocksError # 
Instance details

Defined in Network.Socks5.Types

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> SocksError -> c SocksError #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c SocksError #

toConstr :: SocksError -> Constr #

dataTypeOf :: SocksError -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c SocksError) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c SocksError) #

gmapT :: (forall b. Data b => b -> b) -> SocksError -> SocksError #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> SocksError -> r #

gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> SocksError -> r #

gmapQ :: (forall d. Data d => d -> u) -> SocksError -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> SocksError -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> SocksError -> m SocksError #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> SocksError -> m SocksError #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> SocksError -> m SocksError #

Ord SocksError # 
Instance details

Defined in Network.Socks5.Types

Show SocksError # 
Instance details

Defined in Network.Socks5.Types

Exception SocksError # 
Instance details

Defined in Network.Socks5.Types

Configuration

data SocksConf #

SOCKS configuration structure. this structure will be extended in future to support authentification. use defaultSocksConf to create new record.

Constructors

SocksConf 

Fields

defaultSocksConf :: [Char] -> PortNumber -> SocksConf #

defaultSocksConf create a new record, making sure API remains compatible when the record is extended.

defaultSocksConfFromSockAddr :: SockAddr -> SocksConf #

same as defaultSocksConf except the server address is determined from a SockAddr

A unix SockAddr will raises an error. Only Inet and Inet6 types supported

Methods

socksConnectWithSocket #

Arguments

:: Socket

Socket to use.

-> SocksConf

SOCKS configuration for the server.

-> SocksAddress

SOCKS Address to connect to.

-> IO (SocksHostAddress, PortNumber) 

connect a user specified new socket to the socks server, and connect the stream on the server side to the SockAddress specified.

|socket|-----sockServer----->|server|----destAddr----->|destination|

socksConnect #

Arguments

:: SocksConf

SOCKS configuration for the server.

-> SocksAddress

SOCKS Address to connect to.

-> IO (Socket, (SocksHostAddress, PortNumber)) 

connect a new socket to a socks server and connect the stream on the server side to the SocksAddress specified.

Variants

socksConnectAddr :: Socket -> SockAddr -> SockAddr -> IO () #

Deprecated: use socksConnectWithSocket

connect a new socket to the socks server, and connect the stream on the server side to the sockaddr specified. the sockaddr need to be SockAddrInet or SockAddrInet6.

a unix sockaddr will raises an exception.

|socket|-----sockServer----->|server|----destAddr----->|destination|

socksConnectName :: Socket -> SockAddr -> String -> PortNumber -> IO () #

connect a new socket to the socks server, and connect the stream to a FQDN resolved on the server side.

socksConnectTo' :: String -> PortID -> String -> PortID -> IO Socket #

similar to Network connectTo but use a socks proxy with default socks configuration.

socksConnectTo :: String -> PortID -> String -> PortID -> IO Handle #

similar to Network connectTo but use a socks proxy with default socks configuration.

socksConnectWith #

Arguments

:: SocksConf

SOCKS configuration

-> String

destination hostname

-> PortID

destination port

-> IO Socket 

create a new socket and connect in to a destination through the specified SOCKS configuration.