socks-0.5.5: Socks proxy (version 5) implementation.

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

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 SocksAddress

Describe a Socket address on the SOCKS protocol

Constructors

SocksAddress !SocksHostAddress !PortNumber 

data SocksHostAddress

A Host address on the SOCKS protocol.

Constructors

SocksAddrIPV4 !HostAddress 
SocksAddrDomainName !ByteString 
SocksAddrIPV6 !HostAddress6 

data SocksReply

Type of reply on the SOCKS protocol

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

socksServer :: SocksAddress

SOCKS Address

socksVersion :: SocksVersion

SOCKS version to use

socksPort :: SocksConf -> PortNumber

SOCKS Port

defaultSocksConf :: String -> 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.