从 c# 中的特定端口获取流数据

本文关键字:获取 数据 | 更新日期: 2023-09-27 18:35:09

我正在尝试从特定端口获取流数据,数据来自应用程序,我想捕获它们。实际上,我捕获了数据,但我想它是编码的。

所以我尝试使用UTF-8,默认,ASCII等进行编码。

是否可以使用SharpPcap以可读格式查看数据?

这是我的示例代码:

        var time = e.Packet.Timeval.Date;
        var len = e.Packet.Data.Length;
        var packet = Packet.ParsePacket(e.Packet.LinkLayerType, e.Packet.Data);
        var tcpPacket = PacketDotNet.TcpPacket.GetEncapsulated(packet);
        if (tcpPacket != null)
        {
            var ipPacket = (IpPacket)tcpPacket.ParentPacket;
            IPAddress srcIp = ipPacket.SourceAddress;
            IPAddress dstIp = ipPacket.DestinationAddress;
            int srcPort = tcpPacket.SourcePort;
            int dstPort = tcpPacket.DestinationPort;
            if (dstPort == 31749)
            {
             string[] encs = new string[] {
             "IBM037", "IBM437", "IBM500", "ASMO-708", "DOS-720", "ibm737",
             "ibm775", "ibm850", "ibm852", "IBM855", "ibm857", "IBM00858",
             "IBM860", "ibm861", "DOS-862", "IBM863", "IBM864", "IBM865",
             "cp866", "ibm869", "IBM870", "windows-874", "cp875",
             "shift_jis", "gb2312", "ks_c_5601-1987", "big5", "IBM1026",
             "IBM01047", "IBM01140", "IBM01141", "IBM01142", "IBM01143",
             "IBM01144", "IBM01145", "IBM01146", "IBM01147", "IBM01148",
             "IBM01149", "utf-16", "utf-16BE", "windows-1250",
             "windows-1251", "Windows-1252", "windows-1253", "windows-1254",
             "windows-1255", "windows-1256", "windows-1257", "windows-1258",
             "Johab", "macintosh", "x-mac-japanese", "x-mac-chinesetrad",
             "x-mac-korean", "x-mac-arabic", "x-mac-hebrew", "x-mac-greek",
             "x-mac-cyrillic", "x-mac-chinesesimp", "x-mac-romanian",
             "x-mac-ukrainian", "x-mac-thai", "x-mac-ce", "x-mac-icelandic",
             "x-mac-turkish", "x-mac-croatian", "utf-32", "utf-32BE",
             "x-Chinese-CNS", "x-cp20001", "x-Chinese-Eten", "x-cp20003",
             "x-cp20004", "x-cp20005", "x-IA5", "x-IA5-German",
             "x-IA5-Swedish", "x-IA5-Norwegian", "us-ascii", "x-cp20261",
             "x-cp20269", "IBM273", "IBM277", "IBM278", "IBM280", "IBM284",
             "IBM285", "IBM290", "IBM297", "IBM420", "IBM423", "IBM424",
             "x-EBCDIC-KoreanExtended", "IBM-Thai", "koi8-r", "IBM871",
             "IBM880", "IBM905", "IBM00924", "EUC-JP", "x-cp20936",
             "x-cp20949", "cp1025", "koi8-u", "iso-8859-1", "iso-8859-2",
             "iso-8859-3", "iso-8859-4", "iso-8859-5", "iso-8859-6",
             "iso-8859-7", "iso-8859-8", "iso-8859-9", "iso-8859-13",
             "iso-8859-15", "x-Europa", "iso-8859-8-i", "iso-2022-jp",
             "csISO2022JP", "iso-2022-jp", "iso-2022-kr", "x-cp50227",
             "euc-jp", "EUC-CN", "euc-kr", "hz-gb-2312", "GB18030",
             "x-iscii-de", "x-iscii-be", "x-iscii-ta", "x-iscii-te",
             "x-iscii-as", "x-iscii-or", "x-iscii-ka", "x-iscii-ma",
             "x-iscii-gu", "x-iscii-pa", "utf-7", "utf-8"};
                 foreach (string enc in encs)
                 {
                     Thread.Sleep(500);
                     try
                     {
                         Encoding targetEncoding = Encoding.GetEncoding(enc);
                         string encodedBytes = targetEncoding.GetString(packet.PayloadPacket.PayloadPacket.PayloadData); 
                         Console.WriteLine("->{0}", encodedBytes);
                     }
                     catch
                     {
                         Console.WriteLine("Missing {0}", enc);
                     }
                 }}}

任何帮助将不胜感激。

问候

从 c# 中的特定端口获取流数据

如果数据已编码,则需要解码而不是再次编码。