12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- import socket
- import threading
- import time
- from tcp_packet import TCPPacket
- from ip_layer import IPLayer
- # from utils import net_params
- class TCPSocket:
- _localport = 1234
- _ip_layer = None
- ip = None # ip назначения
- port = None # port назначения
- next_seq_num = 0
- next_ack_num = 0
- send_data = ""
- recv_data = ""
- def __init__(self, ip_layer):
- self._ip_layer = ip_layer
- recv_thread = threading.Thread(target=self._recv_thread, daemon=True)
- send_thread = threading.Thread(target=self._send_thread, daemon=True)
- recv_thread.start()
- send_thread.start()
- def send(self, data):
- self.send_data += data
- def _send(self, packet):
- packet.SEQ = self.next_seq_num
- if packet.ACK == 1:
- packet.ACK = self.next_ack_num
- if (packet.f_SYN == 1 or packet.f_FIN == 1):
- self.next_seq_num = self.next_seq_num + 1
- elif (packet.f_ACK == 1 and len(packet.DATA) == 0):
- self.next_seq_num = self.next_seq_num
- elif (len(packet.DATA) != 0):
- self.next_seq_num = self.next_seq_num + len(packet.DATA)
-
- self._ip_layer.send(self.ip, packet.to_hex_string())
- def _recv_thread(self):
- while True:
- # print("This is recv thread")
- time.sleep(2)
- def _send_thread(self):
- while True:
- # print("This is send thread")
- time.sleep(1)
- def connect(self, ip, port):
- self.ip = ip
- self.port = port
- # print("Opening connection")
- # send SYN
- syn = self.make_tcp_packet()
- syn.f_SYN = 1
- print(syn)
- self._send(syn)
- def make_tcp_packet(self):
- packet = TCPPacket()
- packet.set_ip(IPLayer.get_ip_address(), self.ip)
- packet.SRC = self._localport # type: ignore
- packet.DST = self.port # type: ignore
- return packet
- def main():
- ip_layer = IPLayer()
- sock = TCPSocket(ip_layer)
- sock.connect("8.8.8.8", 80)
- # lock_net = LocalNetwork()
- # print(lock_net.get_ip()) # type: ignore
- if __name__ == "__main__":
- main()
|