Exemple #1
0
def handshake(address):
    # Create the socket
    sock = socket.socket()
    stream = sock.makefile('rb', None)
    # Initiate TCP connection
    sock.connect(address)

    # Send our "version" message
    payload = VersionMessage().serialize()
    envelope = NetworkEnvelope(command=b"version", payload=payload)
    sock.send(envelope.serialize())

    # Receive peer's "version" message
    envelope = NetworkEnvelope.parse(stream)
    print(envelope.command)

    # Receive peer's "verack" message
    envelope = NetworkEnvelope.parse(stream)
    print(envelope.command)

    # Send our "verack" message
    envelope = NetworkEnvelope(command=b"verack", payload=b"")
    sock.send(envelope.serialize())

    return sock, stream
 def test_serialize(self):
     msg = unhexlify('f9beb4d976657261636b000000000000000000005df6e0e2')
     stream = BytesIO(msg)
     envelope = NetworkEnvelope.parse(stream)
     self.assertEqual(envelope.serialize(), msg)
     msg = unhexlify('f9beb4d976657273696f6e0000000000650000005f1a69d2721101000100000000000000bc8f5e5400000000010000000000000000000000000000000000ffffc61b6409208d010000000000000000000000000000000000ffffcb0071c0208d128035cbc97953f80f2f5361746f7368693a302e392e332fcf05050001')
     stream = BytesIO(msg)
     envelope = NetworkEnvelope.parse(stream)
     self.assertEqual(envelope.serialize(), msg)
 def test_parse(self):
     msg = unhexlify('f9beb4d976657261636b000000000000000000005df6e0e2')
     stream = BytesIO(msg)
     envelope = NetworkEnvelope.parse(stream)
     self.assertEqual(envelope.command[:6], b'verack')
     self.assertEqual(envelope.payload, b'')
     msg = unhexlify('f9beb4d976657273696f6e0000000000650000005f1a69d2721101000100000000000000bc8f5e5400000000010000000000000000000000000000000000ffffc61b6409208d010000000000000000000000000000000000ffffcb0071c0208d128035cbc97953f80f2f5361746f7368693a302e392e332fcf05050001')
     stream = BytesIO(msg)
     envelope = NetworkEnvelope.parse(stream)
     self.assertEqual(envelope.command[:7], b'version')
     self.assertEqual(envelope.payload, msg[24:])
Exemple #4
0
def main():
    address = ("91.221.70.137", 8333)
    sock, stream = handshake(address)
    send_getheaders(sock)
    while True:
        try:
            packet = NetworkEnvelope.parse(stream)
        except EOFError:
            print("Peer hung up")
            return
        except Exception as e:
            print(f'encountered "{e}" reading packet')
        handle_packet(packet, sock)
Exemple #5
0
 def _connect(self):
     print(f"connecting to {self.address}")
     self.start = time.time()
     self.start_handshake()
     while not self.complete():
         self.check_for_timeout()
         try:
             packet = NetworkEnvelope.parse(self.stream)
         except EOFError as e:
             # For now we ditch this connection
             raise e
         except Exception as e:
             continue
         self.handle_packet(packet)
import socket
from network import  NetworkEnvelope, VersionMessage

host = 'testnet.programmingbitcoin.com'

port = 18333

socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.connect((host, port))
stream = socket.makefile('rb', None)
version = VersionMessage()
envelope = NetworkEnvelope(version.command, version.serialize())
socket.sendall(envelope.serialize())

while True:
    new_message = NetworkEnvelope.parse(stream)
    print(new_message)
Exemple #7
0
 def test_exercise_1(self):
     message_hex = 'f9beb4d976657261636b000000000000000000005df6e0e2'
     stream = BytesIO(bytes.fromhex(message_hex))
     envelope = NetworkEnvelope.parse(stream)
     self.assertEqual(envelope.command, b'verack')
     self.assertEqual(envelope.payload, b'')
import socket
from network import NetworkEnvelope, VersionMessage

host = 'testnet.programmingbitcoin.com'
port = 18333

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((host, port))

stream = sock.makefile('rb', None)
version = VersionMessage()
envelope = NetworkEnvelope(version.command, version.serialize())
socket.sendall(envelope.serialize())
while True:
    new_m = NetworkEnvelope.parse(stream)
    print(new_m)
Exemple #9
0
from network import NetworkEnvelope
from io import BytesIO

message_hex = 'f9beb4d976657261636b000000000000000000005df6e0e2'

envelope = NetworkEnvelope.parse(BytesIO(bytes.fromhex(message_hex)))
print(envelope.command)
print(envelope.payload)