Пример #1
0
	def run(self):
		while not self._stopping:
			# Read IPv4 header
			self._logger.debug("Waiting for IP header")
			hdr = self._read_chunk(ipv4_header.FIXED_LENGTH)
			if hdr == None: break
			hdr_parsed = ipv4_header(hdr)
			self._logger.debug("Pulled IP header:\n%s", hdr_parsed.dump())

			# Read payload
			payload = self._read_chunk(hdr_parsed.get_total_length() - ipv4_header.FIXED_LENGTH)
			if payload == None: break
			self._logger.debug("Finished reading payload of size %d",  len(payload))

			# Re-combine packet and send to the MAC
			self._mac.send(hdr_parsed.get_dest_address(), hdr + payload)
Пример #2
0
	def run(self):
		while not self._stopping:
			# Read next packet from the MAC
			self._logger.debug("Waiting for packet")
			pkt = self._mac.recv()
			if not pkt: break

			if len(pkt) < ipv4_header.FIXED_LENGTH:
				self._logger.error("Ignoring short packet of size %d", len(pkt))

			# Print IP header for debugging
			self._logger.debug("Pushing IP packet:\n%s",  ipv4_header(pkt).dump())

			# Write data
			while len(pkt) > 0:
				bytes_written = os.write(self._fd, pkt)
				pkt = pkt[bytes_written:]