Fairly invasive, but will help make lib.base useful again. No more Message / ProxiedMessage split!
21 lines
746 B
Python
21 lines
746 B
Python
import socket
|
|
import struct
|
|
|
|
from hippolyzer.lib.base.network.transport import WrappingUDPTransport, UDPPacket
|
|
|
|
|
|
class SOCKS5UDPTransport(WrappingUDPTransport):
|
|
HEADER_STRUCT = struct.Struct("!HBB4sH")
|
|
|
|
@classmethod
|
|
def serialize(cls, packet: UDPPacket, force_socks_header: bool = False) -> bytes:
|
|
# Decide whether we need a header based on packet direction
|
|
if packet.outgoing and not force_socks_header:
|
|
return packet.data
|
|
header = cls.HEADER_STRUCT.pack(
|
|
0, 0, 1, socket.inet_aton(packet.far_addr[0]), packet.far_addr[1])
|
|
return header + packet.data
|
|
|
|
def send_packet(self, packet: UDPPacket) -> None:
|
|
self.transport.sendto(self.serialize(packet), packet.dst_addr)
|