class IpSocket(object): def __init__(self, src_addr='', dest_addr=''): self.sock = DataLinkSocket() self.src_addr = src_addr self.dest_addr = dest_addr def send(self, src_addr, dest_addr, data): self.src_addr = src_addr self.dest_addr = dest_addr ip_packet_for_send = IpPacket(self.src_addr, self.dest_addr, data) try: self.sock.send(ip_packet_for_send.wrap()) except Exception as e: raise def recv(self, packet_type=socket.IPPROTO_TCP): while True: ip_packet_received = IpPacket() packet_raw = self.sock.receive() # packet_raw = self.s_recv.recvfrom(self.buffer) try: ip_packet_received.unwrap(packet_raw) except: continue if ip_packet_received.ip_proto == packet_type and \ ip_packet_received.ip_saddr == self.dest_addr and \ ip_packet_received.ip_daddr == self.src_addr: return ip_packet_received.data
class IpSocket: def __init__(self, saddr_="", daddr_=""): self.sock = DataLinkSocket() # self.buffer = 6000 # buffer size self.src_addr = saddr_ # soure ip address self.dest_addr = daddr_ # destination ip address # self.s_send = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_RAW) # self.s_recv = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP) ############################################################## # send : source ip address, destintation ip address, data -> None # This method is used to send data to destintaion ip address # it will create an ip packet object and wrap it into an encoded # packet and send it to dest ip address machine # if the sending process makes some errors, it will raise an exception ############################################################## def send(self, saddr_, daddr_, data): self.src_addr = saddr_ self.dest_addr = daddr_ ip_packet_for_send = IpPacket(self.src_addr, self.dest_addr, data) try: self.sock.send(ip_packet_for_send.wrap()) except: raise ValueError # self.s_send.sendto(ip_packet_for_send.wrap(), (self.dest_addr, 0)) ############################################################## # recv : the type of the packet expected to receive -> data # This method uses the socket provided by the datalink layer # to receive the packet. It will filter the packet by the # ip address and packet type. ############################################################## def recv(self, packet_type=socket.IPPROTO_TCP): while True: ip_packet_received = IpPacket() packet_raw = self.sock.receive() # packet_raw = self.s_recv.recvfrom(self.buffer) try: ip_packet_received.unwrap(packet_raw) except: # print "IP checksum errors" # drop the ip_packet_received continue # filter the ip ip_packet_received by validing their source # addresses and destintation addresses. if ( ip_packet_received.ip_proto == packet_type and ip_packet_received.ip_saddr == self.dest_addr and ip_packet_received.ip_daddr == self.src_addr ): return ip_packet_received.data
class IpSocket: def __init__(self, saddr_='', daddr_=''): self.sock = DataLinkSocket() # self.buffer = 6000 # buffer size self.src_addr = saddr_ # soure ip address self.dest_addr = daddr_ # destination ip address # self.s_send = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_RAW) # self.s_recv = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP) ############################################################## # send : source ip address, destintation ip address, data -> None # This method is used to send data to destintaion ip address # it will create an ip packet object and wrap it into an encoded # packet and send it to dest ip address machine # if the sending process makes some errors, it will raise an exception ############################################################## def send(self, saddr_, daddr_, data): self.src_addr = saddr_ self.dest_addr = daddr_ ip_packet_for_send = IpPacket(self.src_addr, self.dest_addr, data) try: self.sock.send(ip_packet_for_send.wrap()) except: raise ValueError #self.s_send.sendto(ip_packet_for_send.wrap(), (self.dest_addr, 0)) ############################################################## # recv : the type of the packet expected to receive -> data # This method uses the socket provided by the datalink layer # to receive the packet. It will filter the packet by the # ip address and packet type. ############################################################## def recv(self, packet_type=socket.IPPROTO_TCP): while True: ip_packet_received = IpPacket() packet_raw = self.sock.receive() # packet_raw = self.s_recv.recvfrom(self.buffer) try: ip_packet_received.unwrap(packet_raw) except: # print "IP checksum errors" # drop the ip_packet_received continue # filter the ip ip_packet_received by validing their source # addresses and destintation addresses. if ip_packet_received.ip_proto == packet_type and \ ip_packet_received.ip_saddr == self.dest_addr and \ ip_packet_received.ip_daddr == self.src_addr: return ip_packet_received.data
def __init__(self, saddr_='', daddr_=''): self.sock = DataLinkSocket() # self.buffer = 6000 # buffer size self.src_addr = saddr_ # soure ip address self.dest_addr = daddr_ # destination ip address
def __init__(self, saddr_="", daddr_=""): self.sock = DataLinkSocket() # self.buffer = 6000 # buffer size self.src_addr = saddr_ # soure ip address self.dest_addr = daddr_ # destination ip address
def __init__(self, src_addr='', dest_addr=''): self.sock = DataLinkSocket() self.src_addr = src_addr self.dest_addr = dest_addr