123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- // Example: here's a quickie implementation of the messages in the
- // socks5 protocol.
- struct socks5_client_version {
- u8 version IN [5];
- u8 n_methods;
- u8 methods[n_methods];
- }
- struct socks5_server_method {
- u8 version IN [5];
- u8 method;
- }
- const CMD_CONNECT = 1;
- const CMD_BIND = 2;
- const CMD_UDP_ASSOCIATE = 3;
- // This is a tor extension
- const CMD_RESOLVE = 0xF0;
- const CMD_RESOLVE_PTR = 0xF1;
- const ATYPE_IPV4 = 1;
- const ATYPE_IPV6 = 4;
- const ATYPE_DOMAINNAME = 3;
- struct domainname {
- u8 len;
- char name[len];
- }
- struct socks5_client_request {
- u8 version IN [5];
- u8 command IN [CMD_CONNECT, CMD_BIND, CMD_UDP_ASSOCIATE, CMD_RESOLVE_PTR];
- u8 reserved IN [0];
- u8 atype;
- union dest_addr[atype] {
- ATYPE_IPV4: u32 ipv4;
- ATYPE_IPV6: u8 ipv6[16];
- ATYPE_DOMAINNAME: struct domainname domainname;
- default: fail;
- };
- u16 dest_port;
- }
- struct socks5_server_reply {
- u8 version IN [5];
- u8 reply;
- u8 reserved IN [0];
- u8 atype;
- union bind_addr[atype] {
- ATYPE_IPV4: u32 ipv4;
- ATYPE_IPV6: u8 ipv6[16];
- ATYPE_DOMAINNAME: struct domainname domainname;
- default: fail;
- };
- u16 bind_port;
- }
- struct socks5_client_userpass_auth {
- u8 version IN [1];
- u8 username_len;
- char username[username_len];
- u8 passwd_len;
- char passwd[passwd_len];
- }
- struct socks5_server_userpass_auth {
- u8 version IN [1];
- u8 status;
- }
- // Oh why not. Here's socks4 and socks4a.
- struct socks4_client_request {
- u8 version IN [4];
- u8 command IN [CMD_CONNECT,CMD_BIND,CMD_RESOLVE,CMD_RESOLVE_PTR];
- u16 port;
- u32 addr;
- nulterm username;
- union socks4a_addr[addr] {
- 1..255:
- nulterm hostname;
- default:
- ;
- };
- }
- struct socks4_server_reply {
- u8 version IN [4];
- u8 status;
- u16 port;
- u32 addr;
- }
- // And here's the extended stuff from proposal 229
- struct tor_socksauth_keyval {
- u16 keylen;
- char key[keylen];
- u16 vallen;
- char val[vallen];
- }
- struct tor_extended_socks_auth_request {
- u8 version IN [1];
- u16 npairs;
- struct tor_socksauth_keyval pairs[npairs];
- }
- struct tor_extended_socks_auth_response {
- u8 version IN [1];
- u8 status;
- u16 npairs;
- struct tor_socksauth_keyval pairs[npairs];
- }
|