21 lines
742 B
Python
21 lines
742 B
Python
import socket
|
|
import struct
|
|
|
|
from hippolyzer.lib.base.network.transport import SocketUDPTransport, UDPPacket
|
|
|
|
|
|
class SOCKS5UDPTransport(SocketUDPTransport):
|
|
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)
|