12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- package socks
- import (
- "bytes"
- "encoding/binary"
- "net"
- "testing"
- "github.com/stretchr/testify/assert"
- )
- func createRequestData(version, command uint8, ip net.IP, port uint16) []byte {
- // set the command
- b := []byte{version, command, 0}
- // append the ip
- if len(ip) == net.IPv4len {
- b = append(b, 1)
- b = append(b, ip.To4()...)
- } else {
- b = append(b, 4)
- b = append(b, ip.To16()...)
- }
- // append the port
- p := []byte{0, 0}
- binary.BigEndian.PutUint16(p, port)
- b = append(b, p...)
- return b
- }
- func createRequest(t *testing.T, version, command uint8, ipStr string, port uint16, shouldFail bool) *Request {
- ip := net.ParseIP(ipStr)
- data := createRequestData(version, command, ip, port)
- reader := bytes.NewReader(data)
- req, err := NewRequest(reader)
- if shouldFail {
- assert.Error(t, err)
- return nil
- }
- assert.NoError(t, err)
- assert.True(t, req.Version == socks5Version, "version doesn't match expectation: %v", req.Version)
- assert.True(t, req.Command == command, "command doesn't match expectation: %v", req.Command)
- assert.True(t, req.DestAddr.Port == int(port), "port doesn't match expectation: %v", req.DestAddr.Port)
- assert.True(t, req.DestAddr.IP.String() == ipStr, "ip doesn't match expectation: %v", req.DestAddr.IP.String())
- return req
- }
- func TestValidConnectRequest(t *testing.T) {
- createRequest(t, socks5Version, connectCommand, "127.0.0.1", 1337, false)
- }
- func TestValidBindRequest(t *testing.T) {
- createRequest(t, socks5Version, bindCommand, "2001:db8::68", 1337, false)
- }
- func TestValidAssociateRequest(t *testing.T) {
- createRequest(t, socks5Version, associateCommand, "127.0.0.1", 1234, false)
- }
- func TestInValidVersionRequest(t *testing.T) {
- createRequest(t, 4, connectCommand, "127.0.0.1", 1337, true)
- }
- func TestInValidIPRequest(t *testing.T) {
- createRequest(t, 4, connectCommand, "127.0.01", 1337, true)
- }
|