@@ -484,12 +484,14 @@ def server():
484
484
sock.bind(('127.0.0.1', 13400))
485
485
sock.listen(1)
486
486
server_up.set()
487
- connection, address = sock.accept()
488
- sniff_up.wait(timeout=1)
489
- for i in range(len(buffer)):
490
- connection.send(buffer[i:i+1])
491
- time.sleep(0.01)
492
- connection.close()
487
+ try:
488
+ connection, address = sock.accept()
489
+ sniff_up.wait(timeout=1)
490
+ for i in range(len(buffer)):
491
+ connection.send(buffer[i:i+1])
492
+ time.sleep(0.01)
493
+ finally:
494
+ connection.close()
493
495
finally:
494
496
sock.close()
495
497
@@ -503,6 +505,49 @@ pkts = sock.sniff(timeout=1, count=2, started_callback=sniff_up.set)
503
505
server_thread.join(timeout=1)
504
506
assert len(pkts) == 2
505
507
508
+ = Test DoIPSocket 2 enforce protocol_version
509
+ ~ linux
510
+
511
+ server_up = threading.Event()
512
+ sniff_up = threading.Event()
513
+ def server():
514
+ buffer = b'\x02\xfd\x80\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x02\xfd\x80\x01\x00\x00\x00\n\x10\x10\x0e\x80P\x03\x002\x01\xf4'
515
+ sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
516
+ try:
517
+ sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
518
+ sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
519
+ sock.bind(('127.0.0.1', 13400))
520
+ sock.listen(1)
521
+ server_up.set()
522
+ connection, address = sock.accept()
523
+ try:
524
+ sniff_up.wait(timeout=1)
525
+ connection.send(buffer)
526
+ doip_sock = DoIPSSLStreamSocket(connection)
527
+ pkts = doip_sock.sniff(timeout=2, count=1)
528
+ doip_sock.send(pkts[0])
529
+ finally:
530
+ connection.close()
531
+ finally:
532
+ sock.close()
533
+
534
+
535
+ server_thread = threading.Thread(target=server)
536
+ server_thread.start()
537
+ server_up.wait(timeout=1)
538
+ sock = DoIPSocket(activate_routing=False, doip_version=3, enforce_doip_version=True)
539
+
540
+ pkts = sock.sniff(timeout=1, count=2, started_callback=sniff_up.set)
541
+ sock.send(DoIP(payload_type=0x8001, source_address=0xe80, target_address=0xe400) / UDS() / UDS_TP())
542
+ pkts2 = sock.sniff(timeout=1, count=1)
543
+ server_thread.join(timeout=1)
544
+ assert len(pkts) == 2
545
+ assert len(pkts2) == 1
546
+ assert pkts2[0].protocol_version == 0x03
547
+ assert pkts2[0].inverse_version == 0xfc
548
+ assert pkts2[0].payload_type == 0x8001
549
+ assert pkts2[0].service == 0x3E
550
+
506
551
= Test DoIPSocket 3
507
552
508
553
server_up = threading.Event()
@@ -813,3 +858,67 @@ pkts = sock.sniff(timeout=1, count=2, started_callback=sniff_up.set)
813
858
server_tcp_thread.join(timeout=1)
814
859
server_tls_thread.join(timeout=1)
815
860
assert len(pkts) == 2
861
+
862
+ = Test UDS_DualDoIPSslSocket6 force version 3
863
+ ~ broken_windows not_pypy
864
+
865
+ server_tcp_up = threading.Event()
866
+ server_tls_up = threading.Event()
867
+ sniff_up = threading.Event()
868
+ def server_tls():
869
+ context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
870
+ _load_certificate_chain(context)
871
+ context.check_hostname = False
872
+ context.verify_mode = ssl.CERT_NONE
873
+ buffer = bytes.fromhex("03fc0006000000090e8011061000000000")
874
+ buffer += b'\x03\xfc\x80\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x03\xfc\x80\x01\x00\x00\x00\n\x10\x10\x0e\x80P\x03\x002\x01\xf4'
875
+ sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
876
+ sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
877
+ sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
878
+ ssock = context.wrap_socket(sock)
879
+ try:
880
+ ssock.bind(('::1', 3496))
881
+ ssock.listen(1)
882
+ server_tls_up.set()
883
+ connection, address = ssock.accept()
884
+ sniff_up.wait(timeout=1)
885
+ connection.send(buffer)
886
+ connection.close()
887
+ finally:
888
+ ssock.close()
889
+
890
+ def server_tcp():
891
+ buffer = bytes.fromhex("03fc0006000000090e8011060700000000")
892
+ sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
893
+ try:
894
+ sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
895
+ sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
896
+ sock.bind(('::1', 13400))
897
+ sock.listen(1)
898
+ server_tcp_up.set()
899
+ connection, address = sock.accept()
900
+ connection.send(buffer)
901
+ connection.shutdown(socket.SHUT_RDWR)
902
+ connection.close()
903
+ finally:
904
+ sock.close()
905
+
906
+
907
+ server_tcp_thread = threading.Thread(target=server_tcp)
908
+ server_tcp_thread.start()
909
+ server_tcp_up.wait(timeout=1)
910
+ server_tls_thread = threading.Thread(target=server_tls)
911
+ server_tls_thread.start()
912
+ server_tls_up.wait(timeout=1)
913
+ context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
914
+ context.check_hostname = False
915
+ context.verify_mode = ssl.CERT_NONE
916
+
917
+ conf.debug_dissector = True
918
+
919
+ sock = UDS_DoIPSocket(ip="::1", context=context, doip_version=3, enforce_doip_version=True)
920
+
921
+ pkts = sock.sniff(timeout=1, count=2, started_callback=sniff_up.set)
922
+ server_tcp_thread.join(timeout=1)
923
+ server_tls_thread.join(timeout=1)
924
+ assert len(pkts) == 2
0 commit comments