]> jfr.im git - yt-dlp.git/blobdiff - yt_dlp/socks.py
[ie/youtube:tab] Detect looping feeds (#6621)
[yt-dlp.git] / yt_dlp / socks.py
index 34ba1394ab78f207c154f904b3e3f3f045867071..f93328f63a410797f858c1a8308a7894cf50a2c5 100644 (file)
@@ -8,8 +8,9 @@
 
 import collections
 import socket
+import struct
 
-from .compat import compat_ord, compat_struct_pack, compat_struct_unpack
+from .compat import compat_ord
 
 __author__ = 'Timo Schmid <coding@timoschmid.de>'
 
@@ -19,7 +20,7 @@
 # if the client cannot resolve the destination host's domain name to find its
 # IP address, it should set the first three bytes of DSTIP to NULL and the last
 # byte to a non-zero value.
-SOCKS4_DEFAULT_DSTIP = compat_struct_pack('!BBBB', 0, 0, 0, 0xFF)
+SOCKS4_DEFAULT_DSTIP = struct.pack('!BBBB', 0, 0, 0, 0xFF)
 
 SOCKS5_VERSION = 5
 SOCKS5_USER_AUTH_VERSION = 0x01
@@ -122,11 +123,11 @@ def recvall(self, cnt):
 
     def _recv_bytes(self, cnt):
         data = self.recvall(cnt)
-        return compat_struct_unpack(f'!{cnt}B', data)
+        return struct.unpack(f'!{cnt}B', data)
 
     @staticmethod
     def _len_and_data(data):
-        return compat_struct_pack('!B', len(data)) + data
+        return struct.pack('!B', len(data)) + data
 
     def _check_response_version(self, expected_version, got_version):
         if got_version != expected_version:
@@ -147,7 +148,7 @@ def _setup_socks4(self, address, is_4a=False):
 
         ipaddr = self._resolve_address(destaddr, SOCKS4_DEFAULT_DSTIP, use_remote_dns=is_4a)
 
-        packet = compat_struct_pack('!BBH', SOCKS4_VERSION, Socks4Command.CMD_CONNECT, port) + ipaddr
+        packet = struct.pack('!BBH', SOCKS4_VERSION, Socks4Command.CMD_CONNECT, port) + ipaddr
 
         username = (self._proxy.username or '').encode()
         packet += username + b'\x00'
@@ -157,7 +158,7 @@ def _setup_socks4(self, address, is_4a=False):
 
         self.sendall(packet)
 
-        version, resp_code, dstport, dsthost = compat_struct_unpack('!BBHI', self.recvall(8))
+        version, resp_code, dstport, dsthost = struct.unpack('!BBHI', self.recvall(8))
 
         self._check_response_version(SOCKS4_REPLY_VERSION, version)
 
@@ -171,14 +172,14 @@ def _setup_socks4a(self, address):
         self._setup_socks4(address, is_4a=True)
 
     def _socks5_auth(self):
-        packet = compat_struct_pack('!B', SOCKS5_VERSION)
+        packet = struct.pack('!B', SOCKS5_VERSION)
 
         auth_methods = [Socks5Auth.AUTH_NONE]
         if self._proxy.username and self._proxy.password:
             auth_methods.append(Socks5Auth.AUTH_USER_PASS)
 
-        packet += compat_struct_pack('!B', len(auth_methods))
-        packet += compat_struct_pack(f'!{len(auth_methods)}B', *auth_methods)
+        packet += struct.pack('!B', len(auth_methods))
+        packet += struct.pack(f'!{len(auth_methods)}B', *auth_methods)
 
         self.sendall(packet)
 
@@ -194,7 +195,7 @@ def _socks5_auth(self):
         if method == Socks5Auth.AUTH_USER_PASS:
             username = self._proxy.username.encode()
             password = self._proxy.password.encode()
-            packet = compat_struct_pack('!B', SOCKS5_USER_AUTH_VERSION)
+            packet = struct.pack('!B', SOCKS5_USER_AUTH_VERSION)
             packet += self._len_and_data(username) + self._len_and_data(password)
             self.sendall(packet)
 
@@ -214,14 +215,14 @@ def _setup_socks5(self, address):
         self._socks5_auth()
 
         reserved = 0
-        packet = compat_struct_pack('!BBB', SOCKS5_VERSION, Socks5Command.CMD_CONNECT, reserved)
+        packet = struct.pack('!BBB', SOCKS5_VERSION, Socks5Command.CMD_CONNECT, reserved)
         if ipaddr is None:
             destaddr = destaddr.encode()
-            packet += compat_struct_pack('!B', Socks5AddressType.ATYP_DOMAINNAME)
+            packet += struct.pack('!B', Socks5AddressType.ATYP_DOMAINNAME)
             packet += self._len_and_data(destaddr)
         else:
-            packet += compat_struct_pack('!B', Socks5AddressType.ATYP_IPV4) + ipaddr
-        packet += compat_struct_pack('!H', port)
+            packet += struct.pack('!B', Socks5AddressType.ATYP_IPV4) + ipaddr
+        packet += struct.pack('!H', port)
 
         self.sendall(packet)
 
@@ -240,7 +241,7 @@ def _setup_socks5(self, address):
             destaddr = self.recvall(alen)
         elif atype == Socks5AddressType.ATYP_IPV6:
             destaddr = self.recvall(16)
-        destport = compat_struct_unpack('!H', self.recvall(2))[0]
+        destport = struct.unpack('!H', self.recvall(2))[0]
 
         return (destaddr, destport)