import sys from scapy.all import sniff, send, IP, IPv6, Packet, Raw, Ether, sendp, base64_bytes, hex_bytes,bytes_base64 from scapy.layers.inet import UDP from scapy.layers.rtp import RTP, bind_layers from datetime import datetime def invert_byte(byte): return ~byte & 0xFF def modify_packet(packet: Packet): global modifications global seen udp: Packet = packet[UDP] # udp.show() if RTP in udp: rtp: Packet = udp[RTP] # load: bytes = rtp.load if rtp.payload_type == 96: print("96") # payload: bytes = rtp.payload.load # pretty = bytes_base64(payload) # print(payload) # hex: str = payload.hex() # new_hex = hex[::-1] # print(hex) # print() # print(new_hex) # print(type(new_payload)) # rtp.payload = Raw(hex_bytes(new_hex)) original_payload = bytes(rtp.payload) new_payload_hex = "deadbeef" # New payload in hex format new_payload = bytes.fromhex(new_payload_hex) rtp.payload = Raw(new_payload) udp.len = len(udp) udp.chksum = None # Recalculate checksum # payload[6] = invert_byte(payload[6]) else: print('npe') seen += 1 sendp(packet, iface=sys.argv[1]) if __name__ == "__main__": modifications = 0 seen = 0 if len(sys.argv) != 2: print(f"Usage: {sys.argv[0]} ") sys.exit(1) interface = sys.argv[1] start_time = datetime.now() print(f"Script started at: {start_time.strftime('%Y-%m-%d %H:%M:%S')}") bind_layers(UDP, RTP, sport=6970) packets = sniff(filter="udp port 6970", iface=interface, timeout=60*1, prn=modify_packet) end_time = datetime.now() print(f"Script ended at: {end_time.strftime('%Y-%m-%d %H:%M:%S')}") print(f"{modifications} ip(v6) packets modified") print(f"{seen} total ip(v6) packets seen")