ferogram-connect 0.3.7

Raw TCP connection, MTProto framing and transport for ferogram
Documentation

ferogram-connect

Raw TCP connection, MTProto framing, and transport layer for ferogram.

Crates.io Telegram Channel docs.rs License: MIT OR Apache-2.0

Handles everything between a TcpStream and a decrypted MTProto message. The ferogram crate sits on top of this; most users never touch it directly.

ferogram re-exports everything here. Existing code needs no changes.

Installation

[dependencies]
ferogram-connect = "0.3.7"

What it does

Takes a raw TCP connection to a Telegram DC and gives back decrypted, framed MTProto messages.

  • Abridged, Intermediate, Padded Intermediate, and Full transport framing
  • Obfuscated2 AES-256-CTR transport for bypassing DPI and MTProxy
  • FakeTLS transport for 0xee MTProxy secrets
  • SOCKS5 proxy support
  • MTProxy (tg://proxy?... and https://t.me/proxy?...) connection and secret parsing
  • Keepalive pings with configurable interval
  • gzip inflate and compress for MTProto containers
  • MTProto envelope unwrapping and entity extraction

Transports

use ferogram_connect::TransportKind;

// Plain abridged (default)
TransportKind::Abridged

// Obfuscated2: bypasses ISP blocks, works with plain MTProxy secrets
TransportKind::Obfuscated { secret: None }

// Padded Intermediate: required for 0xdd MTProxy secrets
TransportKind::PaddedIntermediate { secret: Some(key) }

// FakeTLS: required for 0xee MTProxy secrets
TransportKind::FakeTls { secret: key, domain: "...".into() }

MTProxy

use ferogram_connect::MtProxyConfig;

// Parse a proxy link directly
let proxy = ferogram::proxy::parse_proxy_link("https://t.me/proxy?server=...&port=443&secret=...")?;

// Or build manually
let proxy = MtProxyConfig {
    host: "proxy.example.com".into(),
    port: 443,
    secret: vec![/* raw bytes */],
    transport: TransportKind::Obfuscated { secret: None },
};

SOCKS5

use ferogram_connect::Socks5Config;

let socks = Socks5Config::new("127.0.0.1:1080");
let socks_auth = Socks5Config::with_auth("127.0.0.1:1080", "user", "pass");

Stack position

ferogram
└ ferogram-mtsender
  └ ferogram-connect  <-- here
    ├ ferogram-mtproto
    └ ferogram-crypto

License

MIT or Apache-2.0, at your option. See LICENSE-MIT and LICENSE-APACHE.

Ankit Chaubey - github.com/ankit-chaubey