diff options
author | MarcoFalke <falke.marco@gmail.com> | 2020-04-12 19:49:27 -0400 |
---|---|---|
committer | MarcoFalke <falke.marco@gmail.com> | 2020-04-12 19:49:34 -0400 |
commit | c49971f3c9b11e5d959fa2387195826f8400fe93 (patch) | |
tree | 953073886b431479feb8ebe5d7b618817d1dbe8d | |
parent | a2b282c9d05843e5729e1a597ab764d912a6343e (diff) | |
parent | fa404f1e4718e8155581f23826480086dfbcfaa6 (diff) |
Merge #18584: test: Check that the version message does not leak the local address
fa404f1e4718e8155581f23826480086dfbcfaa6 test: Check that the version message does not leak the local address of the node (MarcoFalke)
Pull request description:
Add test for #8740
ACKs for top commit:
theStack:
ACK https://github.com/bitcoin/bitcoin/pull/18584/commits/fa404f1e4718e8155581f23826480086dfbcfaa6
Tree-SHA512: 4d1c10d1c02fba4b51bd8b9eb3a0d9a682b6aac8c3f6924e295fdca3faefa5ecc3eaa87d347cfec5d2b2bc49963c10fe0a37c463f36088ed0304a2e3716b963b
-rwxr-xr-x | test/functional/p2p_leak.py | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/test/functional/p2p_leak.py b/test/functional/p2p_leak.py index 2ecd87748f..c574c1ab9f 100755 --- a/test/functional/p2p_leak.py +++ b/test/functional/p2p_leak.py @@ -15,7 +15,11 @@ import time from test_framework.messages import msg_getaddr, msg_ping, msg_verack from test_framework.mininode import mininode_lock, P2PInterface from test_framework.test_framework import BitcoinTestFramework -from test_framework.util import wait_until +from test_framework.util import ( + assert_equal, + assert_greater_than_or_equal, + wait_until, +) banscore = 10 @@ -86,6 +90,14 @@ class CNodeNoVerackIdle(CLazyNode): self.send_message(msg_getaddr()) +class P2PVersionStore(P2PInterface): + version_received = None + + def on_version(self, msg): + super().on_version(msg) + self.version_received = msg + + class P2PLeakTest(BitcoinTestFramework): def set_test_params(self): self.num_nodes = 1 @@ -123,6 +135,18 @@ class P2PLeakTest(BitcoinTestFramework): assert no_version_idlenode.unexpected_msg == False assert no_verack_idlenode.unexpected_msg == False + self.log.info('Check that the version message does not leak the local address of the node') + time_begin = int(time.time()) + p2p_version_store = self.nodes[0].add_p2p_connection(P2PVersionStore()) + time_end = time.time() + ver = p2p_version_store.version_received + assert_greater_than_or_equal(ver.nTime, time_begin) + assert_greater_than_or_equal(time_end, ver.nTime) + assert_equal(ver.addrFrom.port, 0) + assert_equal(ver.addrFrom.ip, '0.0.0.0') + assert_equal(ver.nStartingHeight, 201) + assert_equal(ver.nRelay, 1) + if __name__ == '__main__': P2PLeakTest().main() |