70 lines
1.8 KiB
Go
70 lines
1.8 KiB
Go
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)
|
|
}
|