mirror of
https://github.com/cmz0228/hysteria-dev.git
synced 2025-08-11 20:01:46 +00:00
.github
app
core
extras
auth
correctnet
masq
obfs
outbounds
acl
speedtest
.mockery.yaml
acl.go
acl_test.go
dns_https.go
dns_standard.go
dns_system.go
interface.go
interface_test.go
mock_PluggableOutbound.go
mock_UDPConn.go
ob_direct.go
ob_direct_linux.go
ob_direct_others.go
ob_http.go
ob_socks5.go
speedtest.go
utils.go
utils_test.go
sniff
trafficlogger
transport
utils
go.mod
go.sum
media-kit
scripts
.gitignore
CHANGELOG.md
Dockerfile
LICENSE.md
PROTOCOL.md
README.md
go.work
go.work.sum
hyperbole.py
logo.svg
platforms.txt
requirements.txt
62 lines
1.6 KiB
Go
62 lines
1.6 KiB
Go
package outbounds
|
|
|
|
import (
|
|
"net"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestACLEngine(t *testing.T) {
|
|
ob1, ob2, ob3 := &mockPluggableOutbound{}, &mockPluggableOutbound{}, &mockPluggableOutbound{}
|
|
obs := []OutboundEntry{
|
|
{"ob1", ob1},
|
|
{"ob2", ob2},
|
|
{"ob3", ob3},
|
|
{"direct", ob2},
|
|
}
|
|
acl, err := NewACLEngineFromString(`
|
|
ob2(google.com,tcp)
|
|
ob3(youtube.com,udp)
|
|
ob1 (1.1.1.1/24,*,8.8.8.8)
|
|
Direct(cia.gov)
|
|
reJect(nsa.gov)
|
|
`, obs, nil)
|
|
assert.NoError(t, err)
|
|
|
|
// No match, default, should be the first (ob1)
|
|
ob1.EXPECT().TCP(&AddrEx{Host: "example.com"}).Return(nil, nil).Once()
|
|
conn, err := acl.TCP(&AddrEx{Host: "example.com"})
|
|
assert.NoError(t, err)
|
|
assert.Nil(t, conn)
|
|
|
|
// Match ob2
|
|
ob2.EXPECT().TCP(&AddrEx{Host: "google.com"}).Return(nil, nil).Once()
|
|
conn, err = acl.TCP(&AddrEx{Host: "google.com"})
|
|
assert.NoError(t, err)
|
|
assert.Nil(t, conn)
|
|
|
|
// Match ob3
|
|
ob3.EXPECT().UDP(&AddrEx{Host: "youtube.com"}).Return(nil, nil).Once()
|
|
udpConn, err := acl.UDP(&AddrEx{Host: "youtube.com"})
|
|
assert.NoError(t, err)
|
|
assert.Nil(t, udpConn)
|
|
|
|
// Match ob1 hijack IP
|
|
ob1.EXPECT().TCP(&AddrEx{Host: "8.8.8.8", ResolveInfo: &ResolveInfo{IPv4: net.ParseIP("8.8.8.8").To4()}}).Return(nil, nil).Once()
|
|
conn, err = acl.TCP(&AddrEx{ResolveInfo: &ResolveInfo{IPv4: net.ParseIP("1.1.1.22")}})
|
|
assert.NoError(t, err)
|
|
assert.Nil(t, conn)
|
|
|
|
// direct should be ob2 as we override it
|
|
ob2.EXPECT().TCP(&AddrEx{Host: "cia.gov"}).Return(nil, nil).Once()
|
|
conn, err = acl.TCP(&AddrEx{Host: "cia.gov"})
|
|
assert.NoError(t, err)
|
|
assert.Nil(t, conn)
|
|
|
|
// reject
|
|
conn, err = acl.TCP(&AddrEx{Host: "nsa.gov"})
|
|
assert.Error(t, err)
|
|
assert.Nil(t, conn)
|
|
}
|