Загрузка...

Telegram | Getting StringSessionn by Auth Key and DC ID with the subsequent entrance to the Telethon account

Thread in Python created by жизнь Jun 8, 2025. (bumped Jun 19, 2025) 512 views

  1. жизнь
    ⁡telegram_session_encoder.py
    ⁡ — Данный модуль позволяет создать строку StringSession для последующего использования, используя уже auth_key и DC ID.
    ⁡main.py
    ⁡ — Пример использования модуля: создаёт StringSession работает с аккаунтом Телеграма через Telethon. (В примере используется невалидный auth_key для демонстрации)

    Python
    import base64
    import ipaddress
    import struct
    from dataclasses import dataclass
    from typing import ClassVar, Mapping


    @dataclass(frozen=True)
    class TelegramSessionEncoder:
    """
    Encodes a Telegram session using a given auth_key and data center ID (dc_id).
    Produces a base64-encoded string suitable for use with Telegram clients.
    """
    auth_key: bytes
    dc_id: int

    _VERSION: ClassVar[str] = "1"
    _PORT: ClassVar[int] = 443
    _DC_IP_MAP: ClassVar[Mapping[int, str]] = {
    1: "149.154.175.53",
    2: "149.154.167.51",
    3: "149.154.175.100",
    4: "149.154.167.91",
    5: "91.108.56.130",
    203: "91.105.192.100",
    }

    def to_string(self) -> str:
    """
    Converts the session to a base64-encoded string.
    Format: <VERSION><base64(dc_id | ip | port | auth_key)>
    """
    ip_bytes = self._resolve_ip()
    payload = self._build_payload(ip_bytes)
    encoded = base64.urlsafe_b64encode(payload).decode("ascii")
    return f"{self._VERSION}{encoded}"

    def _resolve_ip(self) -> bytes:
    """
    Resolves the IP address for the given DC ID.
    Returns packed IP in bytes.
    """
    ip = self._DC_IP_MAP.get(self.dc_id)
    if not ip:
    raise ValueError(f"Unknown data center ID: {self.dc_id}")
    return ipaddress.ip_address(ip).packed

    def _build_payload(self, ip_bytes: bytes) -> bytes:
    """
    Builds the binary payload to be encoded.
    Structure: <dc_id:1B><ip:N><port:2B><auth_key:256B>
    """
    if len(self.auth_key) != 256:
    raise ValueError("auth_key must be exactly 256 bytes")
    fmt = f">B{len(ip_bytes)}sH256s"
    return struct.pack(fmt, self.dc_id, ip_bytes, self._PORT, self.auth_key)
    Python
    import asyncio
    from dataclasses import dataclass
    from telethon import TelegramClient
    from telethon.sessions import StringSession

    from telegram_session_encoder import TelegramSessionEncoder


    @dataclass(frozen=True)
    class APIConfig:
    api_id: int = 2040
    api_hash: str = "b18441a1ff607e10a989891a5462e627"
    device_model: str = "Desktop"
    system_version: str = "Windows 10"
    app_version: str = "3.4.3 x64"
    lang_code: str = "en"
    system_lang_code: str = "en-US"
    lang_pack: str = "tdesktop"


    async def main():
    auth_key_hex = "9b9067d02925853f458acc6405822ec63f7a227177d6a1b207d64dd8d52c3234ed8ad97d1de8c65ea570bc25ae527c14cb6d90107f2bbc5fa6d1d84db69c2b7e1776d59296276f7024e1d092cb24188125d93f3cc16a15fd2c61cd80c49dd62422b13467693f8a5201a329aa031f52af2d48781803bc8721f8ac907e8df13d17c6f8337441fe5337f91c2f721a5fcbde73aa3368c91ed130489640e94204262e9076ac547322ee57f91c44502ec90e2dbd7d793e76de7b27a36a29050b6562e9236525e9c8abcafb3d30a64ddec7971328d9a60dc4b759b30204134347888a12bd7d1e1ada5aebeda40a0d67b7e088c3898598368b28a327fcd204ef47cd2792"

    auth_key = bytes.fromhex(auth_key_hex)
    dc_id = 5

    session_encoder = TelegramSessionEncoder(auth_key, dc_id)
    string_session_str = session_encoder.to_string()

    string_session = StringSession(string_session_str)

    api_config = APIConfig()

    async with TelegramClient(
    session=string_session,
    api_id=api_config.api_id,
    api_hash=api_config.api_hash,
    device_model=api_config.device_model,
    system_version=api_config.system_version,
    app_version=api_config.app_version,
    lang_code=api_config.lang_code,
    system_lang_code=api_config.system_lang_code,
    ) as client:
    me = await client.get_me()
    print(f"Logged in as: {me.first_name}")


    if __name__ == "__main__":
    asyncio.run(main())
     
  2. danxshine
    danxshine Jun 8, 2025 0 Aug 19, 2023
    Лучший :dance:
     
  3. gsdjy2jrg
    gsdjy2jrg Jun 9, 2025 1 Apr 27, 2024
    [IMG]
    На днях искал решение данной проблемы, пришлось самому делать) Telethon
     
  4. Solitaire
    Solitaire Jun 13, 2025 Купить домен анонимно - t.me/FastDomainBot 4385 Sep 1, 2024
    Не по форме - переместите код в репозиторий github и укажите в префиксе основной язык.
     
Loading...
Top