当前位置: 首页 > 知识库问答 >
问题:

如何将有效的TCP消息发送到.NET Framework上的telegram服务器?

姬弘文
2023-03-14
    static void Main(string[] args)
    {
        // Data buffer for incoming data.
        byte[] bytes = new byte[128];

        //addresses
        IPAddress ipAddress = IPAddress.Parse("149.154.167.40");
        IPEndPoint remoteEP = new IPEndPoint(ipAddress,443);

        // Create a TCP/IP  socket.
        Socket sender = new Socket(AddressFamily.InterNetwork,
            SocketType.Stream, ProtocolType.Tcp);

        // Attempt
        sender.Connect(remoteEP);
        Console.WriteLine("Socket connected to {0}",
                sender.RemoteEndPoint.ToString());

        byte[] msg = msg1(); //msg1() returns a 40-byte array

        sender.Send(msg); // Synchronize process for simplicity.  

        sender.Receive(bytes); // Synchronize process for simplicity.  

        print_bytes(bytes);

        try
        {
            sender.Shutdown(SocketShutdown.Both);
            sender.Close();
        }
        catch { } // Sorry for the empty catch block ;)
        Console.ReadKey();
        return;
    }
00-00-00-00-00-00-00-00-00-20-3D-C0-50-93-7B-58
14-00-00-00-78-97-46-60-00-BB-27-06-2B-F8-4D-9B
BE-9C-7B-B1-92-55-9F-E5

msg1()来源(有点乱):

static byte[] msg1()
    {
        var r = new System.Collections.Generic.List<Byte>();
        //length(?) //tried with next lines uncommented, no luck.
        //r.Add(0x0A); //len/4
        //r.Add(0x00);
        //auth_key_id=0 (8 bytes)
        r.AddRange(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 });
        //msg_id =ut*2^32
        ulong unixTimestamp = (ulong)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).Ticks;//ut*10^7
        unixTimestamp = (ulong)(unixTimestamp * 429.4967296);
        unixTimestamp -= unixTimestamp % 4;
        byte[] msgid = BitConverter.GetBytes(unixTimestamp);
        if (!BitConverter.IsLittleEndian)
            Array.Reverse(msgid);
        r.AddRange(msgid);
        //msglength
        int msgl = 20;
        byte[] ml = BitConverter.GetBytes(msgl);
        if (!BitConverter.IsLittleEndian)
            Array.Reverse(msgid);
        r.AddRange(ml);
        int rem = 4 - ml.Length;
        for (int i = 0; i < rem; i++)
            r.Add(0);
        //operation code
        r.AddRange(new byte[] { 0x78, 0x97, 0x46, 0x60 });
        //random number
        Random f = new Random(450639);
        byte[] ran16 = new byte[16];
        f.NextBytes(ran16);
        r.AddRange(ran16);
        //ready to go!
        Console.WriteLine("MESSAGE SENT:\n---\n");
        print_bytes(r.ToArray());
        Console.WriteLine("\n---\n");
        return r.ToArray();
    }

共有1个答案

云啸
2023-03-14

以下操作将起作用:请参阅以下说明:

EF0A
0000000000000000
00203DC050937B58
14000000
78974660
00BB27062BF84D9BBE9C7BB192559FE5

说明:

EF--会话开始指示器请参阅此处

0A -- total_length/ 4

0000000000000000 -- auth_key_id = 0 for plain-text messages
14000000 -- length
78974660 -- TL type-code for req_pq#60469778 
00BB27062BF84D9BBE9C7BB192559FE5 -- random 128 bit nonce 
 类似资料:
  • 我正在从Java向logstash发送TCP字符串消息。我不想为每条消息创建一个新的TCP连接,但我想重用TCP连接。保留一个TCP连接并通过socket.write和socket.flush发送消息,直到其中一个方法抛出IOException然后打开新连接,这样是否安全?

  • 谁能给出一个简单的代码吗?我可以简单地进行HTTP调用吗?

  • 我正在编写自己的websocket服务器和客户端。我成功地处理了握手并建立了联系。 现在我正在编写send_message函数,它创建了一个合适的框架。下面的例子只是为了这个问题,它不是我最终打算写的,这只是我尝试给我相同的结果的许多方法中的一种。 输入:以上函数应发送 第一个字节 第一位设置为1-,表示这是消息的最后一帧 第二、第三和第四个-所有的零,对于这个例子来说是不相关的 以下四位-000

  • Azure服务总线可以发送计划的消息。使用此处描述的AMQP协议发送计划消息:https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-amqp-request-response#message-operations 调度消息。要求 请求消息必须包括以下应用程序属性: |键|值|类型|必需|值内容 |操作|字符

  • 我正在通过Spring集成设置一个TCP客户端,以字符串作为有效负载发送消息,不期望返回。也许序列化器/反序列化器不能正常工作?对不起,我正在学习Spring集成。 我可以通过oepnssl连接到外部TCP服务器: 我需要发送的命令是“sessions.list\n。\n”。 现在我构建了一个试图连接到服务器的tcp客户端: spring上下文。xml 因此,在这个repo之后,字符串应该转换为字

  • 我正在阅读websockets,在阅读了大量的教程和博客(主要是关于创建一个简单的聊天应用程序)之后,仍然有一个问题没有得到回答: 那么,是否不可能让一些外部应用程序或事件调用一些脚本(bash或php)来使用现有运行的websocket实例向一个或多个连接的浏览器(websocket客户端)发送/广播一些信息(文本)? 抱歉,如果这是一个愚蠢的问题,但我无法找到答案,通过阅读这些博客在网上。 谢