From f9aa1cd21f776a4d3267d9c89772bdc622468d6d Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Sat, 2 Mar 2019 08:45:07 +0100 Subject: [PATCH] Revert "swarm/network: Use actual remote peer ip in underlay (#19137)" (#19193) This reverts commit 460d206f309fc0884c666bd191a1b6a4b63462fc. --- swarm/network/protocol.go | 21 +-------------------- swarm/network/protocol_test.go | 26 -------------------------- 2 files changed, 1 insertion(+), 46 deletions(-) diff --git a/swarm/network/protocol.go b/swarm/network/protocol.go index ba2a7e5fa..6f8eadad2 100644 --- a/swarm/network/protocol.go +++ b/swarm/network/protocol.go @@ -21,7 +21,6 @@ import ( "errors" "fmt" "net" - "regexp" "sync" "time" @@ -40,8 +39,6 @@ const ( bzzHandshakeTimeout = 3000 * time.Millisecond ) -var regexpEnodeIP = regexp.MustCompile("@(.+):([0-9]+)") - // BzzSpec is the spec of the generic swarm handshake var BzzSpec = &protocols.Spec{ Name: "bzz", @@ -217,26 +214,10 @@ func (b *Bzz) performHandshake(p *protocols.Peer, handshake *HandshakeMsg) error return err } handshake.peerAddr = rsh.(*HandshakeMsg).Addr - sanitizeEnodeRemote(p.RemoteAddr(), handshake.peerAddr) handshake.LightNode = rsh.(*HandshakeMsg).LightNode return nil } -// the remote enode string may advertise arbitrary host information (e.g. localhost) -// this method ensures that the addr of the peer will be the one -// applicable on the interface the connection came in on -// it modifies the passed bzzaddr in place, and returns the same pointer -func sanitizeEnodeRemote(paddr net.Addr, baddr *BzzAddr) { - hsSubmatch := regexpEnodeIP.FindSubmatch(baddr.UAddr) - ip, _, err := net.SplitHostPort(paddr.String()) - // since we expect nothing else than ipv4 here, a panic on missing submatch is desired - if err == nil && string(hsSubmatch[1]) != ip { - remoteStr := fmt.Sprintf("@%s:%s", ip, string(hsSubmatch[2])) - log.Debug("rewrote peer uaddr host/port", "addr", baddr) - baddr.UAddr = regexpEnodeIP.ReplaceAll(baddr.UAddr, []byte(remoteStr)) - } -} - // runBzz is the p2p protocol run function for the bzz base protocol // that negotiates the bzz handshake func (b *Bzz) runBzz(p *p2p.Peer, rw p2p.MsgReadWriter) error { @@ -343,7 +324,7 @@ func (b *Bzz) GetOrCreateHandshake(peerID enode.ID) (*HandshakeMsg, bool) { init: make(chan bool, 1), done: make(chan struct{}), } - // when handshake is first created for a remote peer + // when handhsake is first created for a remote peer // it is initialised with the init handshake.init <- true b.handshakes[peerID] = handshake diff --git a/swarm/network/protocol_test.go b/swarm/network/protocol_test.go index 97cb4b97b..64ce7ba4a 100644 --- a/swarm/network/protocol_test.go +++ b/swarm/network/protocol_test.go @@ -17,15 +17,12 @@ package network import ( - "bytes" "flag" "fmt" - "net" "os" "testing" "time" - "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/p2p/enode" @@ -254,26 +251,3 @@ func TestBzzHandshakeLightNode(t *testing.T) { }) } } - -// Tests the overwriting of localhost enode in handshake if actual remote ip is known -// (swarm.network/protocol.go:sanitizeEnodeRemote) -func TestSanitizeEnodeRemote(t *testing.T) { - pk, err := crypto.GenerateKey() - if err != nil { - t.Fatal(err) - } - remoteIP := net.IPv4(0x80, 0x40, 0x20, 0x10) - remoteAddr := net.TCPAddr{ - IP: remoteIP, - Port: 30399, - } - nodLocal := enode.NewV4(&pk.PublicKey, net.IPv4(0x7f, 0x00, 0x00, 0x01), 30341, 30341) - nodRemote := enode.NewV4(&pk.PublicKey, remoteIP, 30341, 30341) - baddr := RandomAddr() - oldUAddr := []byte(nodLocal.String()) - baddr.UAddr = oldUAddr - sanitizeEnodeRemote(&remoteAddr, baddr) - if !bytes.Equal(baddr.UAddr, []byte(nodRemote.String())) { - t.Fatalf("insane address. expected %v, got %v", nodRemote.String(), string(baddr.UAddr)) - } -}