Browse Source

PacketGenerator und PayloadGenerator hinzugefuegt

3 neue Dateien:
MessageType: Definiert als Enum alle Typen, die eine Nachricht nach dem Austauschprotokoll des Botnet haben kann
PayloadGenerator: Generiert einen zufaelligen String der angegebenen Laenge aus Gross/Klein-Buchstaben und Ziffern
PacketGenerator: Generiert UDP und TCP Pakete mit gewuenschten Werten, der IPPacketGenerator ist hier mit implementiert
Marcel Juschak 7 years ago
parent
commit
280b2f6951
3 changed files with 157 additions and 0 deletions
  1. 11 0
      code/ID2TLib/MessageType.py
  2. 132 0
      code/ID2TLib/PacketGenerator.py
  3. 14 0
      code/ID2TLib/PayloadGenerator.py

+ 11 - 0
code/ID2TLib/MessageType.py

@@ -0,0 +1,11 @@
+from enum import Enum
+
+class MessageType(Enum):
+	"""
+	Defines possible Message types
+	"""
+
+	HELLO=0
+	HELLO_REPLY=1
+	NEIGHBORLIST_REQUEST=2
+	NEIGHBORLIST_REPLY=3

+ 132 - 0
code/ID2TLib/PacketGenerator.py

@@ -0,0 +1,132 @@
+from MessageType import MessageType
+
+import PayloadGenerator
+
+from scapy.layers.inet import IP, Ether, UDP, TCP
+from scapy.packet import Raw
+
+class Packet_Generator():
+	"""docstring for Packet_Generator"""
+	def __init__(self, protocol="udp"):
+		super(Packet_Generator, self).__init__()
+		self.protocol = protocol
+
+	def generate_Packet(self, ip_src: str="192.168.64.32", ip_dst: str="192.168.64.48", mac_src: str="56:6D:D9:BC:70:1C",
+		mac_dst: str="F4:2B:95:B3:0E:1A", port_src: int=1337, port_dst: int=6442,
+		tcpflags: str="S", payload: str=""):
+		"""
+		Creates a Packet with the specified Values for the current protocol
+
+		:param ip_src: the source IP address of the IP header
+	    :param ip_dst the destination IP address of the IP header
+	    :param mac_src: the source MAC address of the MAC header
+	    :param mac_dst: the destination MAC address of the MAC header
+	    :param port_src: the source port of the header
+	    :param port_dst: the destination port of the header
+	    :param tcpflags: the TCP flags of the TCP header
+	    :param payload: the payload of the packet
+	    :return: the corresponding packet
+	    """
+
+	    #directly generate packet with the current protocol
+		if(self.protocol == "udp"):
+			packet = generate_udp_packet(ip_src=ip_src, ip_dst=ip_dst, mac_src=mac_src, mac_dst=mac_dst,
+				port_src=port_src, port_dst=port_dst, payload=payload)
+		elif(self.protocol == "tcp"):
+			packet = generate_tcp_packet(ip_src=ip_src, ip_dst=ip_dst, mac_src=mac_src, mac_dst=mac_dst,
+				port_src=port_src, port_dst=port_dst, tcpflags=tcpflags, payload=payload)
+		#else raise exception?
+		return packet
+		
+
+	def generate_MMCOM_Packet(self, ip_src: str="192.168.64.32", ip_dst: str="192.168.64.48", mac_src: str="56:6D:D9:BC:70:1C",
+			mac_dst: str="F4:2B:95:B3:0E:1A", port_src: int=1337, port_dst: int=6442, tcpflags: str="S",
+			message_type: MessageType=MessageType.HELLO, neighborlist_entries: int=1):
+		"""
+		Creates a Packet for Members-Management-Communication with the specified Values and the current protocol
+
+		:param ip_src: the source IP address of the IP header
+	    :param ip_dst the destination IP address of the IP header
+	    :param mac_src: the source MAC address of the MAC header
+	    :param mac_dst: the destination MAC address of the MAC header
+	    :param port_src: the source port of the header
+	    :param port_dst: the destination port of the header
+	    :param tcpflags: the TCP flags of the TCP header
+	    :param message_type: affects the size of the payload
+	    :param neighborlist_entries: Number of entries for the payload
+	    :return: the corresponding packet
+	    """
+
+	    #Determine length of the payload that has to be generated
+		if(message_type == MessageType.HELLO):
+			payload_len = 0
+		elif(message_type == MessageType.HELLO_REPLY):
+			payload_len = 22
+		elif(message_type == MessageType.NEIGHBORLIST_REQUEST):
+			payload_len = 28
+		elif(message_type == MessageType.NEIGHBORLIST_REPLY):
+			payload_len = 24 + 6 * neighborlist_entries
+		else:
+			payload_len = 0
+
+		#generate payload
+		payload = PayloadGenerator.generate_Payload(payload_len)
+
+		#generate the packet
+		if(self.protocol == "udp"):
+			packet = generate_udp_packet(ip_src=ip_src, ip_dst=ip_dst, mac_src=mac_src, mac_dst=mac_dst,
+				port_src=port_src, port_dst=port_dst, payload=payload)
+		elif(self.protocol == "tcp"):
+			packet = generate_tcp_packet(ip_src=ip_src, ip_dst=ip_dst, mac_src=mac_src, mac_dst=mac_dst,
+				port_src=port_src, port_dst=port_dst, tcpflags=tcpflags, payload=payload)
+		#else raise exception?
+		return packet
+
+
+def generate_tcp_packet(ip_src:str="192.168.64.32", ip_dst:str="192.168.64.48", mac_src:str="56:6D:D9:BC:70:1C", 
+					   mac_dst:str="F4:2B:95:B3:0E:1A", port_src:int=1337, port_dst:int=6442, tcpflags:str="S", payload:str=""):
+	"""
+    Builds an TCP packet with the values specified by the caller. If a parameter was not specified by the caller, 
+    it is set to a default value.
+    
+    :param ip_src: the source IP address of the IP header
+    :param ip_dst the destination IP address of the IP header
+    :param mac_src: the source MAC address of the MAC header
+    :param mac_dst: the destination MAC address of the MAC header
+    :param port_src: the source port of the TCP header
+    :param port_dst: the destination port of the TCP header
+    :param tcpflags: the TCP flags of the TCP header
+    :param payload: the payload of the packet
+    :return: the corresponding IP packet
+    """
+
+	ether = Ether(src=mac_src, dst=mac_dst)
+	ip = IP(src=ip_src, dst=ip_dst)
+	tcp = TCP(sport=port_src, dport=port_dst, flags=tcpflags)
+	packet = ether / ip / tcp / Raw(load=payload)
+	return packet
+
+
+def generate_udp_packet(ip_src:str="192.168.64.32", ip_dst:str="192.168.64.48", mac_src:str="56:6D:D9:BC:70:1C", 
+					   mac_dst:str="F4:2B:95:B3:0E:1A", port_src:int=1337, port_dst:int=6442, payload:str=""):
+	"""
+    Builds an UDP packet with the values specified by the caller. If a parameter was not specified by the caller, 
+    it is set to a default value.
+    
+    :param ip_src: the source IP address of the IP header
+    :param ip_dst the destination IP address of the IP header
+    :param mac_src: the source MAC address of the MAC header
+    :param mac_dst: the destination MAC address of the MAC header
+    :param port_src: the source port of the UDP header
+    :param port_dst: the destination port of the UDP header
+    :param udp_len: length of the UDP packet, 8Byte header + payload
+    :param udp_chksum: checksum of the UDP packet
+    :param payload: the payload of the packet
+    :return: the corresponding UDP packet
+    """
+
+	ether = Ether(src=mac_src, dst=mac_dst)
+	ip = IP(src=ip_src, dst=ip_dst)
+	udp = UDP(sport=port_src, dport=port_dst)
+	packet = ether / ip / udp / Raw(load=payload)
+	return packet

+ 14 - 0
code/ID2TLib/PayloadGenerator.py

@@ -0,0 +1,14 @@
+import string
+import random
+
+def generate_Payload(size:int=0):
+
+	"""
+	Generates a payload of random digits and letters of the given size
+
+	:param size: number of generated characters, that make up the payload
+	"""
+
+	payload = "".join(random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for i in range (0,size))
+
+	return payload