File: send-addrs-msg.py

package info (click to toggle)
python-bitcoinlib 0.12.2-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 1,356 kB
  • sloc: python: 8,212; makefile: 132; sh: 6
file content (66 lines) | stat: -rwxr-xr-x 1,543 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#!/usr/bin/env python3

import socket, time, bitcoin
from bitcoin.messages import msg_version, msg_verack, msg_addr
from bitcoin.net import CAddress


PORT = 18333

bitcoin.SelectParams('testnet') 

def version_pkt(client_ip, server_ip):
    msg = msg_version()
    msg.nVersion = 70002
    msg.addrTo.ip = server_ip
    msg.addrTo.port = PORT
    msg.addrFrom.ip = client_ip
    msg.addrFrom.port = PORT

    return msg

def addr_pkt( str_addrs ):
    msg = msg_addr()
    addrs = []
    for i in str_addrs:
        addr = CAddress()
        addr.port = 18333
        addr.nTime = int(time.time())
        addr.ip = i

        addrs.append( addr )
    msg.addrs = addrs
    return msg

s = socket.socket()

server_ip = "192.168.0.149"
client_ip = "192.168.0.13"

s.connect( (server_ip,PORT) )

# Send Version packet
s.send( version_pkt(client_ip, server_ip).to_bytes() )

# Get Version reply
print(s.recv(1924))

# Send Verack
s.send( msg_verack().to_bytes() )
# Get Verack
print(s.recv(1024))

# Send Addrs
s.send( addr_pkt(["252.11.1.2", "EEEE:7777:8888:AAAA::1"]).to_bytes() )

time.sleep(1) 
s.close()

# debug log on the server should look like:
# accepted connection 192.168.0.13:39979
# send version message: version 70002, blocks=317947, us=****, them=0.0.0.0:0, peer=192.168.0.13:39979
# receive version message: /pythonbitcoin0.0.1/: version 70002, blocks=-1, us=192.168.0.149:18333, them=192.168.0.13:18333, peer=192.168.0.13:39979
# Added 2 addresses from 192.168.0.13: 3 tried, 1706 new
# disconnecting node 192.168.0.13:39979