That's most of it, but it doesn't work yet so I'm going to make sure it doesn't compile for travis. tcp forwarding works still.

This commit is contained in:
idk
2018-07-30 18:32:22 -04:00
parent 2f452fa1ee
commit 227b076f1a
5 changed files with 53 additions and 56 deletions

View File

@ -7,6 +7,8 @@ echo:
test: test:
go test go test
cd udp && go test
deps: deps:
go get -u github.com/zieckey/goini go get -u github.com/zieckey/goini

View File

@ -108,12 +108,12 @@ func main() { func main() {
[This tiny file server taken from here and used for this example](https://gist.github.com/paulmach/7271283) [This tiny file server taken from here and used for this example](https://gist.github.com/paulmach/7271283)
-----BEGIN PGP SIGNATURE----- -----BEGIN PGP SIGNATURE-----
iQEzBAEBCAAdFiEEcNIGBzi++AUjrK/311wDs5teFOEFAltfhGwACgkQ11wDs5te iQEzBAEBCAAdFiEEcNIGBzi++AUjrK/311wDs5teFOEFAltfkfIACgkQ11wDs5te
FOFRAgf5AXXdEGDXIjsCTndYXAqABpDEGafXAE2y2ls4eKBRmTakUoXjIuL6ETS1 FOFlpQf/TjVL8ul0x0oeZ7NZ/GiyFaAGiFiiaR0TuMOgfixPg6/mFR5rK9cqOB8C
QbKqwd4MKX38uUqhIkwddg/sTcIb1V1hdkmBl01q0e//a6CxcqKHfxSGng50L78I i95VPiggddofWxuhKDe3mBntuiBkfCn5ct4vSBR+VO/wReXBDtnmJ/rMx9al8FE/
j9qKmvQMneuhk37UZI4icalx12gNvtb450CruSGJ7T6nWep5cfqHOLleEq1YXOjq a3twnqC88qo4iGJhhSmzvmkpzloycvslxIM39cQ+CCZgXNopJwIPYA1IZXPfAUrB
4s70pz+AtXn3P3t8IoxQe3x18xTEAeBE47d4BwxAaUg4CFHvKBGk65LbSvNF6ElW zKh/gNZ9eR+l7FmYW7Bv0geUxCdHuaSONMeg0gDNo7C9fpoAFwEX7kO+jNqaZGV9
nnIdAWvO9L6b7WBgwrAdzFt85BaXB7f1ppC4guM7NX9oAfyetKI3ASSurK+S0lGS gd5g1aa4xqXUbMac2wFVD4fZ2ESd1sE6XU8w0H6gYNN0Y4Kh7fR1hXyGex9X/tvW
RWbD+UFbYwmwSq8+htQ6ztRSVhGRdA== KLW0Y/jDmMoXuVWvc+zv8pNiHSBMNw==
=Cnbw =DjnL
-----END PGP SIGNATURE----- -----END PGP SIGNATURE-----

View File

@ -8,7 +8,7 @@ import (
func TestOptionHost(t *testing.T) { func TestOptionHost(t *testing.T) {
client, err := NewSAMForwarderFromOptions(SetHost("127.0.0.1")) client, err := NewSAMForwarderFromOptions(SetHost("127.0.0.1"))
if err != nil { if err != nil {
t.Fatalf("NewDefaultClient() Error: %q\n", err) t.Fatalf("NewSAMForwarder() Error: %q\n", err)
} }
log.Println(client.Base32()) log.Println(client.Base32())
} }
@ -16,7 +16,7 @@ func TestOptionHost(t *testing.T) {
func TestOptionPort(t *testing.T) { func TestOptionPort(t *testing.T) {
client, err := NewSAMForwarderFromOptions(SetPort("7656")) client, err := NewSAMForwarderFromOptions(SetPort("7656"))
if err != nil { if err != nil {
t.Fatalf("NewDefaultClient() Error: %q\n", err) t.Fatalf("NewSAMForwarder() Error: %q\n", err)
} }
log.Println(client.Base32()) log.Println(client.Base32())
} }
@ -24,7 +24,7 @@ func TestOptionPort(t *testing.T) {
func TestOptionInLength(t *testing.T) { func TestOptionInLength(t *testing.T) {
client, err := NewSAMForwarderFromOptions(SetInLength(3)) client, err := NewSAMForwarderFromOptions(SetInLength(3))
if err != nil { if err != nil {
t.Fatalf("NewDefaultClient() Error: %q\n", err) t.Fatalf("NewSAMForwarder() Error: %q\n", err)
} }
log.Println(client.Base32()) log.Println(client.Base32())
} }
@ -32,7 +32,7 @@ func TestOptionInLength(t *testing.T) {
func TestOptionOutLength(t *testing.T) { func TestOptionOutLength(t *testing.T) {
client, err := NewSAMForwarderFromOptions(SetInLength(3)) client, err := NewSAMForwarderFromOptions(SetInLength(3))
if err != nil { if err != nil {
t.Fatalf("NewDefaultClient() Error: %q\n", err) t.Fatalf("NewSAMForwarder() Error: %q\n", err)
} }
log.Println(client.Base32()) log.Println(client.Base32())
} }
@ -40,7 +40,7 @@ func TestOptionOutLength(t *testing.T) {
func TestOptionInVariance(t *testing.T) { func TestOptionInVariance(t *testing.T) {
client, err := NewSAMForwarderFromOptions(SetInVariance(1)) client, err := NewSAMForwarderFromOptions(SetInVariance(1))
if err != nil { if err != nil {
t.Fatalf("NewDefaultClient() Error: %q\n", err) t.Fatalf("NewSAMForwarder() Error: %q\n", err)
} }
log.Println(client.Base32()) log.Println(client.Base32())
} }
@ -48,7 +48,7 @@ func TestOptionInVariance(t *testing.T) {
func TestOptionOutVariance(t *testing.T) { func TestOptionOutVariance(t *testing.T) {
client, err := NewSAMForwarderFromOptions(SetOutVariance(1)) client, err := NewSAMForwarderFromOptions(SetOutVariance(1))
if err != nil { if err != nil {
t.Fatalf("NewDefaultClient() Error: %q\n", err) t.Fatalf("NewSAMForwarder() Error: %q\n", err)
} }
log.Println(client.Base32()) log.Println(client.Base32())
} }
@ -56,7 +56,7 @@ func TestOptionOutVariance(t *testing.T) {
func TestOptionInQuantity(t *testing.T) { func TestOptionInQuantity(t *testing.T) {
client, err := NewSAMForwarderFromOptions(SetInQuantity(6)) client, err := NewSAMForwarderFromOptions(SetInQuantity(6))
if err != nil { if err != nil {
t.Fatalf("NewDefaultClient() Error: %q\n", err) t.Fatalf("NewSAMForwarder() Error: %q\n", err)
} }
log.Println(client.Base32()) log.Println(client.Base32())
} }
@ -64,7 +64,7 @@ func TestOptionInQuantity(t *testing.T) {
func TestOptionOutQuantity(t *testing.T) { func TestOptionOutQuantity(t *testing.T) {
client, err := NewSAMForwarderFromOptions(SetOutQuantity(6)) client, err := NewSAMForwarderFromOptions(SetOutQuantity(6))
if err != nil { if err != nil {
t.Fatalf("NewDefaultClient() Error: %q\n", err) t.Fatalf("NewSAMForwarder() Error: %q\n", err)
} }
log.Println(client.Base32()) log.Println(client.Base32())
} }
@ -72,7 +72,7 @@ func TestOptionOutQuantity(t *testing.T) {
func TestOptionInBackups(t *testing.T) { func TestOptionInBackups(t *testing.T) {
client, err := NewSAMForwarderFromOptions(SetInBackups(5)) client, err := NewSAMForwarderFromOptions(SetInBackups(5))
if err != nil { if err != nil {
t.Fatalf("NewDefaultClient() Error: %q\n", err) t.Fatalf("NewSAMForwarder() Error: %q\n", err)
} }
log.Println(client.Base32()) log.Println(client.Base32())
} }
@ -80,7 +80,7 @@ func TestOptionInBackups(t *testing.T) {
func TestOptionOutBackups(t *testing.T) { func TestOptionOutBackups(t *testing.T) {
client, err := NewSAMForwarderFromOptions(SetOutBackups(5)) client, err := NewSAMForwarderFromOptions(SetOutBackups(5))
if err != nil { if err != nil {
t.Fatalf("NewDefaultClient() Error: %q\n", err) t.Fatalf("NewSAMForwarder() Error: %q\n", err)
} }
log.Println(client.Base32()) log.Println(client.Base32())
} }
@ -88,7 +88,7 @@ func TestOptionOutBackups(t *testing.T) {
func TestOptionReduceIdleQuantity(t *testing.T) { func TestOptionReduceIdleQuantity(t *testing.T) {
client, err := NewSAMForwarderFromOptions(SetReduceIdleQuantity(4)) client, err := NewSAMForwarderFromOptions(SetReduceIdleQuantity(4))
if err != nil { if err != nil {
t.Fatalf("NewDefaultClient() Error: %q\n", err) t.Fatalf("NewSAMForwarder() Error: %q\n", err)
} }
log.Println(client.Base32()) log.Println(client.Base32())
} }
@ -96,7 +96,7 @@ func TestOptionReduceIdleQuantity(t *testing.T) {
func TestOptionEncryptLease(t *testing.T) { func TestOptionEncryptLease(t *testing.T) {
client, err := NewSAMForwarderFromOptions(SetEncrypt(true)) client, err := NewSAMForwarderFromOptions(SetEncrypt(true))
if err != nil { if err != nil {
t.Fatalf("NewDefaultClient() Error: %q\n", err) t.Fatalf("NewSAMForwarder() Error: %q\n", err)
} }
log.Println(client.Base32()) log.Println(client.Base32())
} }
@ -104,7 +104,7 @@ func TestOptionEncryptLease(t *testing.T) {
func TestOptionSaveFile(t *testing.T) { func TestOptionSaveFile(t *testing.T) {
client, err := NewSAMForwarderFromOptions(SetSaveFile(true)) client, err := NewSAMForwarderFromOptions(SetSaveFile(true))
if err != nil { if err != nil {
t.Fatalf("NewDefaultClient() Error: %q\n", err) t.Fatalf("NewSAMForwarder() Error: %q\n", err)
} }
log.Println(client.Base32()) log.Println(client.Base32())
} }

View File

@ -25,8 +25,9 @@ type SAMSSUForwarder struct {
samConn *sam3.SAM samConn *sam3.SAM
samKeys sam3.I2PKeys samKeys sam3.I2PKeys
publishSession *sam3.DatagramSession publishConnection *sam3.DatagramSession
publishConnection net.PacketConn //publishConnection net.Conn
clientConnection net.Conn
FilePath string FilePath string
file io.ReadWriter file io.ReadWriter
@ -86,21 +87,23 @@ func (f *SAMSSUForwarder) sam() string {
return f.SamHost + ":" + f.SamPort return f.SamHost + ":" + f.SamPort
} }
func (f *SAMSSUForwarder) forward(conn net.PacketConn) { //func (f *SAMSSUForwarder) forward(conn net.Conn) {
client, err := net.Dial("udp", f.Target()) func (f *SAMSSUForwarder) forward() {
var err error
f.clientConnection, err = net.Dial("udp", f.Target())
if err != nil { if err != nil {
log.Fatalf("Dial failed: %v", err) log.Fatalf("Dial failed: %v", err)
} }
log.Printf("Connected to localhost %v\n", conn) log.Printf("Connected to localhost %v\n", f.publishConnection)
go func() { go func() {
defer client.Close() defer f.clientConnection.Close()
defer conn.Close() defer f.publishConnection.Close()
//io.Copy(client, conn) io.Copy(f.clientConnection, f.publishConnection)
}() }()
go func() { go func() {
defer client.Close() defer f.clientConnection.Close()
defer conn.Close() defer f.publishConnection.Close()
//io.Copy(conn, client) io.Copy(f.publishConnection, f.clientConnection)
}() }()
} }
@ -111,7 +114,7 @@ func (f *SAMSSUForwarder) Base32() string {
//Serve starts the SAM connection and and forwards the local host:port to i2p //Serve starts the SAM connection and and forwards the local host:port to i2p
func (f *SAMSSUForwarder) Serve() error { func (f *SAMSSUForwarder) Serve() error {
if f.publishSession, err = f.samConn.NewDatagramSession(f.TunName, f.samKeys, if f.publishConnection, err = f.samConn.NewDatagramSession(f.TunName, f.samKeys,
[]string{ []string{
"inbound.length=" + f.inLength, "inbound.length=" + f.inLength,
"outbound.length=" + f.outLength, "outbound.length=" + f.outLength,
@ -135,20 +138,12 @@ func (f *SAMSSUForwarder) Serve() error {
return err return err
} }
log.Println("SAM stream session established.") log.Println("SAM stream session established.")
/*if f.publishListen, err = f.publishSession.Listen(); err != nil {
return err
}*/
log.Println("Starting Listener.") log.Println("Starting Listener.")
b := string(f.samKeys.Addr().Base32()) b := string(f.samKeys.Addr().Base32())
log.Println("SAM Listener created,", b+".b32.i2p") log.Println("SAM Listener created,", b+".b32.i2p")
for { for {
//conn, err := f.publishListen.Accept() log.Printf("Accepted connection %v\n", f.publishConnection)
if err != nil { go f.forward()
log.Fatalf("ERROR: failed to accept listener: %v", err)
}
log.Printf("Accepted connection %v\n", f.publishSession)
go f.forward(f.publishSession)
} }
} }

View File

@ -8,7 +8,7 @@ import (
func TestOptionUDPHost(t *testing.T) { func TestOptionUDPHost(t *testing.T) {
client, err := NewSAMSSUForwarderFromOptions(SetHost("127.0.0.1")) client, err := NewSAMSSUForwarderFromOptions(SetHost("127.0.0.1"))
if err != nil { if err != nil {
t.Fatalf("NewDefaultClient() Error: %q\n", err) t.Fatalf("NewSAMSSUForwarder() Error: %q\n", err)
} }
log.Println(client.Base32()) log.Println(client.Base32())
} }
@ -16,7 +16,7 @@ func TestOptionUDPHost(t *testing.T) {
func TestOptionUDPPort(t *testing.T) { func TestOptionUDPPort(t *testing.T) {
client, err := NewSAMSSUForwarderFromOptions(SetPort("7656")) client, err := NewSAMSSUForwarderFromOptions(SetPort("7656"))
if err != nil { if err != nil {
t.Fatalf("NewDefaultClient() Error: %q\n", err) t.Fatalf("NewSAMSSUForwarder() Error: %q\n", err)
} }
log.Println(client.Base32()) log.Println(client.Base32())
} }
@ -24,7 +24,7 @@ func TestOptionUDPPort(t *testing.T) {
func TestOptionUDPInLength(t *testing.T) { func TestOptionUDPInLength(t *testing.T) {
client, err := NewSAMSSUForwarderFromOptions(SetInLength(3)) client, err := NewSAMSSUForwarderFromOptions(SetInLength(3))
if err != nil { if err != nil {
t.Fatalf("NewDefaultClient() Error: %q\n", err) t.Fatalf("NewSAMSSUForwarder() Error: %q\n", err)
} }
log.Println(client.Base32()) log.Println(client.Base32())
} }
@ -32,7 +32,7 @@ func TestOptionUDPInLength(t *testing.T) {
func TestOptionUDPOutLength(t *testing.T) { func TestOptionUDPOutLength(t *testing.T) {
client, err := NewSAMSSUForwarderFromOptions(SetInLength(3)) client, err := NewSAMSSUForwarderFromOptions(SetInLength(3))
if err != nil { if err != nil {
t.Fatalf("NewDefaultClient() Error: %q\n", err) t.Fatalf("NewSAMSSUForwarder() Error: %q\n", err)
} }
log.Println(client.Base32()) log.Println(client.Base32())
} }
@ -40,7 +40,7 @@ func TestOptionUDPOutLength(t *testing.T) {
func TestOptionUDPInVariance(t *testing.T) { func TestOptionUDPInVariance(t *testing.T) {
client, err := NewSAMSSUForwarderFromOptions(SetInVariance(1)) client, err := NewSAMSSUForwarderFromOptions(SetInVariance(1))
if err != nil { if err != nil {
t.Fatalf("NewDefaultClient() Error: %q\n", err) t.Fatalf("NewSAMSSUForwarder() Error: %q\n", err)
} }
log.Println(client.Base32()) log.Println(client.Base32())
} }
@ -48,7 +48,7 @@ func TestOptionUDPInVariance(t *testing.T) {
func TestOptionUDPOutVariance(t *testing.T) { func TestOptionUDPOutVariance(t *testing.T) {
client, err := NewSAMSSUForwarderFromOptions(SetOutVariance(1)) client, err := NewSAMSSUForwarderFromOptions(SetOutVariance(1))
if err != nil { if err != nil {
t.Fatalf("NewDefaultClient() Error: %q\n", err) t.Fatalf("NewSAMSSUForwarder() Error: %q\n", err)
} }
log.Println(client.Base32()) log.Println(client.Base32())
} }
@ -56,7 +56,7 @@ func TestOptionUDPOutVariance(t *testing.T) {
func TestOptionUDPInQuantity(t *testing.T) { func TestOptionUDPInQuantity(t *testing.T) {
client, err := NewSAMSSUForwarderFromOptions(SetInQuantity(6)) client, err := NewSAMSSUForwarderFromOptions(SetInQuantity(6))
if err != nil { if err != nil {
t.Fatalf("NewDefaultClient() Error: %q\n", err) t.Fatalf("NewSAMSSUForwarder() Error: %q\n", err)
} }
log.Println(client.Base32()) log.Println(client.Base32())
} }
@ -64,7 +64,7 @@ func TestOptionUDPInQuantity(t *testing.T) {
func TestOptionUDPOutQuantity(t *testing.T) { func TestOptionUDPOutQuantity(t *testing.T) {
client, err := NewSAMSSUForwarderFromOptions(SetOutQuantity(6)) client, err := NewSAMSSUForwarderFromOptions(SetOutQuantity(6))
if err != nil { if err != nil {
t.Fatalf("NewDefaultClient() Error: %q\n", err) t.Fatalf("NewSAMSSUForwarder() Error: %q\n", err)
} }
log.Println(client.Base32()) log.Println(client.Base32())
} }
@ -72,7 +72,7 @@ func TestOptionUDPOutQuantity(t *testing.T) {
func TestOptionUDPInBackups(t *testing.T) { func TestOptionUDPInBackups(t *testing.T) {
client, err := NewSAMSSUForwarderFromOptions(SetInBackups(5)) client, err := NewSAMSSUForwarderFromOptions(SetInBackups(5))
if err != nil { if err != nil {
t.Fatalf("NewDefaultClient() Error: %q\n", err) t.Fatalf("NewSAMSSUForwarder() Error: %q\n", err)
} }
log.Println(client.Base32()) log.Println(client.Base32())
} }
@ -80,7 +80,7 @@ func TestOptionUDPInBackups(t *testing.T) {
func TestOptionUDPOutBackups(t *testing.T) { func TestOptionUDPOutBackups(t *testing.T) {
client, err := NewSAMSSUForwarderFromOptions(SetOutBackups(5)) client, err := NewSAMSSUForwarderFromOptions(SetOutBackups(5))
if err != nil { if err != nil {
t.Fatalf("NewDefaultClient() Error: %q\n", err) t.Fatalf("NewSAMSSUForwarder() Error: %q\n", err)
} }
log.Println(client.Base32()) log.Println(client.Base32())
} }
@ -88,7 +88,7 @@ func TestOptionUDPOutBackups(t *testing.T) {
func TestOptionUDPReduceIdleQuantity(t *testing.T) { func TestOptionUDPReduceIdleQuantity(t *testing.T) {
client, err := NewSAMSSUForwarderFromOptions(SetReduceIdleQuantity(4)) client, err := NewSAMSSUForwarderFromOptions(SetReduceIdleQuantity(4))
if err != nil { if err != nil {
t.Fatalf("NewDefaultClient() Error: %q\n", err) t.Fatalf("NewSAMSSUForwarder() Error: %q\n", err)
} }
log.Println(client.Base32()) log.Println(client.Base32())
} }
@ -96,7 +96,7 @@ func TestOptionUDPReduceIdleQuantity(t *testing.T) {
func TestOptionUDPEncryptLease(t *testing.T) { func TestOptionUDPEncryptLease(t *testing.T) {
client, err := NewSAMSSUForwarderFromOptions(SetEncrypt(true)) client, err := NewSAMSSUForwarderFromOptions(SetEncrypt(true))
if err != nil { if err != nil {
t.Fatalf("NewDefaultClient() Error: %q\n", err) t.Fatalf("NewSAMSSUForwarder() Error: %q\n", err)
} }
log.Println(client.Base32()) log.Println(client.Base32())
} }
@ -104,7 +104,7 @@ func TestOptionUDPEncryptLease(t *testing.T) {
func TestOptionUDPSaveFile(t *testing.T) { func TestOptionUDPSaveFile(t *testing.T) {
client, err := NewSAMSSUForwarderFromOptions(SetSaveFile(true)) client, err := NewSAMSSUForwarderFromOptions(SetSaveFile(true))
if err != nil { if err != nil {
t.Fatalf("NewDefaultClient() Error: %q\n", err) t.Fatalf("NewSAMSSUForwarder() Error: %q\n", err)
} }
log.Println(client.Base32()) log.Println(client.Base32())
} }