Files
Web_IoTBase_Sever_Prod/ConsoleApp1/Program.cs

494 lines
18 KiB
C#
Raw Normal View History

2025-12-11 14:04:39 +08:00
using System.Collections.Concurrent;
using System.Net.Sockets;
using System.Net;
using System.Net.WebSockets;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using System.Text;
using CommonEntity;
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using RestSharp;
using ViewModels;
using System.Text.Json;
using CommonEntity.RCUEntity;
using Newtonsoft.Json;
namespace ConsoleApp1
{
internal class Program
{
public static async void MQTT()
{
try
{
ConnectionFactory factory = new ConnectionFactory();
//factory.HostName = "122.152.232.170";
factory.HostName = "172.16.4.132";
factory.UserName = "myuser";
factory.Password = "123456";
factory.VirtualHost = "/";
using (var connection = await factory.CreateConnectionAsync())
using (var channel = await connection.CreateChannelAsync())
{
await channel.QueueDeclareAsync(queue: "mymessage",
durable: false,
exclusive: false,
autoDelete: false,
arguments: null);
var consumer = new AsyncEventingBasicConsumer(channel);
consumer.ReceivedAsync += Consumer_ReceivedAsync; ;
await channel.BasicConsumeAsync(queue: "mymessage",
autoAck: true,
consumer: consumer);
}
}
catch (Exception e1)
{
Console.WriteLine(e1.ToString());
}
Console.ReadKey();
}
static void MMM()
{
//心跳
//string ASD = "AA 30 00 80 01 00 FF FF FF FF 5F C5 64 B3 93 50 FA 3F 48 D0 E9 C0 DD 7E 7C 62 10 E4 AD 4C EA 0D 04 FD 39 4C A7 77 40 18 7F 31 2D 2D 0D 0A 2D 2D";
//注册
string ASD = "AA 30 00 01 00 01 2F 00 00 00 65 C1 26 0D AB 51 74 F3 F9 BC 33 DF 3A 80 CC 43 71 77 49 84 D5 6F 03 63 76 AF 50 6B 6E 02 AD 94 2D 2D 0D 0A 2D 2D";
string ASD1 = "AA 16 00 02 00 00 00 00 00 00 F6 D7 30 93 EA 98 2D 2D 0D 0A 2D 2D";
//byte[] key = Tools.HEXString2ByteArray("35 65 6C 6B 48 58 67 76 56 58 4D 4A 6F 68 50 69".Replace(" ", ""));
byte[] key = new byte[] { 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c };
var NNN1 = Tools.HEXString2ByteArray(ASD.Replace(" ", ""));
string OStr = Tools.ByteToString(NNN1);
//头
byte Header = NNN1[0];
//从1到3之间的元素不包括3
//长度
byte[] Len = NNN1[1..3];
byte[] Pack_SN = NNN1[3..5];
//重发次数
byte RetryCount = NNN1[5];
//设备编号
byte[] DeviceOnlyNo = NNN1[6..10];
ushort llf = (ushort)NNN1.Length;
//IV内容组成Pack_Head + Pack_LEN + Pack_SN + Retry_Num + Client_ID + Pack_END
//2D 2D 0D 0A 2D 2D
List<byte> IIV = new List<byte>();
IIV.Add(0xAA);
IIV.AddRange(BitConverter.GetBytes(llf));
IIV.AddRange(Pack_SN);
IIV.Add(0x00);
IIV.AddRange(DeviceOnlyNo);
IIV.AddRange(new byte[] { 0x2D, 0x2D, 0x0D, 0x0A, 0x2D, 0x2D });
byte[] New_IV = IIV.ToArray();
//命令字
byte[] Command = NNN1[10..12];
//AA 30 00 01 00 00 FF FF FF FF C2 B3 1A 5F 98 08 AB 20 48 1A A9 26 B1 30 A2 61 25 EB A3 0B FE 50 C9 B9 F6 97 B5 A9 7C 57 A9 87 2D 2D 0D 0A 2D 2D
byte[] GGJ = NNN1[10..^8];
///加密
byte[] oooo = Tools.HEXString2ByteArray("02 00 01 00 1D 05 29 05 20 03 F4 FF 00 00 00 00 24 04 B2 07 6B 00 39 00 1B 00 37 00 01 00".Replace(" ", ""));
AES_CTR forEncrypting = new AES_CTR(key, New_IV);
byte[] encryptedContent = new byte[oooo.Length];
forEncrypting.EncryptBytes(encryptedContent, oooo);
//解密
AES_CTR forDecrypting = new AES_CTR(key, New_IV);
byte[] decryptedContent = new byte[GGJ.Length];
forDecrypting.DecryptBytes(decryptedContent, GGJ);
string DStr = Tools.ByteToString(decryptedContent);
byte[] cmd = decryptedContent[0..2];
Console.WriteLine("命令字为A" + Tools.ByteToString(cmd));
//01
//00 00
//01 00
//01 00
//01
//00
//01
//04 0A 4D 00 53 00 0F 80 13 11 0C 80
byte = decryptedContent[0];
byte[] ID = decryptedContent[1..3];
byte[] ID = decryptedContent[3..5];
byte[] ID = decryptedContent[5..7];
byte MCU软件版本 = decryptedContent[7];
byte MCU硬件版本 = decryptedContent[8];
byte MCUUUID长度 = decryptedContent[9];
byte[] MCUUUID = decryptedContent[10..];
}
public class UserData
{
public string username { get; set; }
public string password { get; set; }
}
async static void httpsss()
{
List<UserData> userdata = new List<UserData>();
userdata.Add(new UserData { username = "aaa", password = "bbb" });
RestClient client1 = new RestClient("http://iot-manage.uts-data.com:5001");
string ti = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
var request1 = new RestRequest("/api/Values/SetChache", Method.Post);
request1.AddJsonBody(userdata);
var re = client1.Execute(request1);
Console.WriteLine(re);
}
public class MsgData
{
public string? PhoneNumber { get; set; }
public string? CallerName { get; set; }
public string? Content { get; set; }
public string? StartingPoint { get; set; }
public string? DeadLine { get; set; }
public string? Type { get; set; }
}
public static string BaseUrl = "http://blv-rd.tech:19041";
public static async Task SendMsg(MsgData data)
{
var options = new RestClientOptions(BaseUrl);
var client = new RestClient(options);
var request = new RestRequest("/api/CallAndMsg/SendToPhone");
request.AddBody(data, ContentType.Json);
RestResponse response = await client.ExecuteAsync(request, Method.Post);
string? allow_or_deny = response.Content;
}
public class DeviceCacheInfo
{
public int ClientId { get; set; }
public string? SecretKey { get; set; }
}
public static void HttpOOO()
{
List<DeviceCacheInfo> userdata = new List<DeviceCacheInfo>();
userdata.Add(new DeviceCacheInfo { ClientId = 71, SecretKey = "OaPyD3vSC6UCNOBF" });
RestClient client1 = new RestClient("http://iot-manage.uts-data.com:5001");
string ti = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
var request1 = new RestRequest("/api/Values/SetDeviceInfoChache", Method.Post);
request1.AddJsonBody(userdata);
var re = client1.Execute(request1);
Console.WriteLine(re);
}
static void MyCRC()
{
byte[] yu = Tools.HEXString2ByteArray("AA 17 00 00 00 00 47 00 00 00 4B 4F 4F 4F 4E".Replace(" ", ""));
ushort hsu000 = Tools.CRC16(yu, yu.Length);
}
async static void UDP_Test()
{
int clientCount = 20000;
var tasks = new Task[clientCount];
for (int i = 0; i < clientCount; i++)
{
int clientId = i;
tasks[i] = Task.Run(async () =>
{
using var client = new UdpClient();
var serverEP = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 3360);
// 只发送一次连接消息
string msg = $"111";
byte[] data = Encoding.UTF8.GetBytes(msg);
await client.SendAsync(data, data.Length, serverEP);
Console.WriteLine($"客户端 {clientId} 已连接");
});
await Task.Delay(1000); // 控制创建速度
}
await Task.WhenAll(tasks);
Console.WriteLine($"所有 {clientCount} 个客户端已创建");
Console.ReadKey();
}
static void T1()
{
var yuanshidata = File.ReadAllText("2.txt", Encoding.UTF8);
var USA = JsonConvert.DeserializeObject<RCU_UDPData>(yuanshidata);
//var USA= JsonSerializer.Deserialize<RCU_UDPData>(yuanshidata);
var UUA = USA.endpoint;
var hostnum = USA.hostnum;
var timestamp = USA.currenttimestamp;
var data = USA.data;
var CCC = Encoding.ASCII.GetString(UUA);
}
public static async Task SSSAAA()
{
//await Common.Cache.Cache.SetCache();
//await Common.Cache.Cache.GetCache();
}
static void Main(string[] args)
{
MQTT();
Console.ReadLine();
for (int i = 0; i < 10; i++)
{
//int j = 8;
//Task.Run(() =>
//{
//});
}
int j = 30;
Common.Cache.Cache.SetCache("youset", new CommonEntity.CacheEntity.MyData_Cache() { EndPoint = "aaa" + j.ToString() });
var USA = Common.Cache.Cache.GetCache("youset");
Console.WriteLine(Common.Cache.Cache._sessions.Count);
byte[] Y111 = Tools.HEXString2ByteArray("AA 1A 00 01 00 00 47 00 00 00 66 62 C8 D9 AE BF 8C 9D".Replace(" ", ""));
var AAASSSF = Y111[^5..^3];
for (int i = 0; i < 100000; i++)
{
SSSAAA();
}
Console.ReadKey();
T1();
UDP_Test();
Console.ReadKey();
MyCRC();
//AA150052000247000000525001 CRC data: 62494
byte[] Y = Tools.HEXString2ByteArray("AA 1A 00 01 00 00 47 00 00 00 66 62 C8 D9 AE BF 8C 9D".Replace(" ", ""));
ushort Y1 = Tools.CRC16(Y, Y.Length);
ConcurrentBag<string> sss = new ConcurrentBag<string>();
for (int i = 0; i < 10; i++)
{
sss.Add(i.ToString());
}
foreach (var item in sss)
{
sss.TryTake(out string nnn);
}
ushort sn = 21;
byte[] key_key = Encoding.ASCII.GetBytes("OaPyD3vSC6UCNOBF0");
var yuanshidata = File.ReadAllText("1.txt", Encoding.UTF8);
byte[] HHHHAAA = Tools.HEXString2ByteArray(yuanshidata.Replace(" ", ""));
byte[] GGJ1111 = HHHHAAA[10..^8];
var jiamishuju = Tools.IHIOT_Message_Content_Encrypt(sn, key_key, GGJ1111);
string jiemihoude = Tools.ByteToString(jiamishuju);
//31 33 31 33 C1 33 30 32 C1 33 DC CC 33 33 32 33 56 31 49 34 72 33 0F 33 2D 33 1F 33 33 33 CC 5C 2D 2D 0D 0A 2D 2D
//02 00 02 00 F2 00 03 01 F2 00 EF FF 00 00 01 00 65 02 7A 07 41 00 3C 00 1E 00 2C 00 00 00
//var T = System.Text.Json.JsonSerializer.Deserialize<TcpSendDataLog>(AAASSSS1);
//var US = T.send_data;
//var AAA1232 = US.Select(A => Convert.ToByte(A));
string[] datannn = "116.5.212.60:34068".Split(':');
string ip = datannn[0];
ushort port = 0;
ushort.TryParse(datannn[1], out port);
byte[] fff1232 = new byte[] { 0xff, 0x00, 0x00, 0x00 };
uint AAASSS = BitConverter.ToUInt32(fff1232);
byte[] yu = Tools.HEXString2ByteArray("AA 15 00 51 06 01 00 00 00 00 03 00 01".Replace(" ", ""));
ushort hsu000 = Tools.CRC16(yu, yu.Length);
MsgData ss = new MsgData();
ss.PhoneNumber = "15515750973";
ss.CallerName = "文祚明";
ss.Content = "您的燃气报警器触发警报请尽快确认处理";
ss.StartingPoint = Tools.ToUnixTimestampBySeconds(DateTime.Now).ToString();
ss.DeadLine = Tools.ToUnixTimestampBySeconds(DateTime.Now.AddMinutes(1)).ToString();
ss.Type = "1";
SendMsg(ss).Wait();
byte[] bbbuw = Encoding.UTF8.GetBytes("Hello");
ushort hsu = Tools.CRC16(bbbuw, bbbuw.Length);
//byte[] HHASD= Encoding.ASCII.GetBytes("5elkHXgvVXMJohPi");
//byte[] DeviceOnlyNo11 = new byte[] { 0x2f,0x00,0x00,0x00};
//int JJJ= BitConverter.ToInt32(DeviceOnlyNo11);
//httpsss();
//byte[] bf = new byte[] { 0xff, 0xff, 0xff, 0xff };
//long lla = BitConverter.ToInt32(bf, 0);
MMM();
//Program.MQTT();
//Console.WriteLine(" 按回车退出");
//Console.ReadLine();
//byte[] qqq1 = Encoding.ASCII.GetBytes("@8xq*BU3+3kuE:Oj");
//string aaa1 = Tools.ByteToString(qqq1);
//byte[] bbb = new byte[] { 0xaa, 0x0c, 0x7a, 0x74, 0x01, 0x01 };
//bbb.AsSpan<byte>(1, 3);
//if (bbb is [0b10101010, .. _, 0x01])
//{
//}
string NNN3 = Tools.GetMD5("Admin:Pass");
string HHH = "AA 30 00 36 00 00 FF FF FF FF 22 A5 BB 25 9D A7 EF 4D 21 D5 B1 CA 68 CA 01 3F 7D 2D 75 89 73 19 2F 6C D2 46 68 EE 94 CE FE C1 2D 2D 0D 0A 2D 2D";
//解密后36 A8 E4 C0 E6 7D 88 42 13 19 4C BD 60 0F E4 C9 9E 59 68 90 ED C1 92 0A 79 E2 8E 2F
byte[] GGJ = Tools.HEXString2ByteArray(HHH.Replace(" ", ""));
var AAA = GGJ[1..^3];
string NNN = Encoding.ASCII.GetString(GGJ);
byte[] NNN000 = Convert.FromBase64String("qi4ALwMA/////8/vzB8BXXKshD0gekFkJqxc/JpxIfFWtVUFKWECZlbxLS0NCi0t");
byte[] NNN1 = Convert.FromBase64String("qjAAGAAA/////6Mx2iQ7s34d9PLhy1rIipFFLahyFKyKssNpYUL5+Kq5LS0NCi0t");
var NNN222 = Convert.ToBase64String(NNN1);
var NNN444 = Encoding.ASCII.GetBytes(NNN222);
string NNN555 = Tools.ByteToString(NNN444);
string NNN33 = Tools.ByteToString(NNN1);
//AA 13 00 44 0B 00 FF FF FF FF 61 67 EF 6B E8 2D 2D 0D 0A 2D 2D
Span<byte> slice = NNN1.AsSpan(1, 3);
byte Header = NNN1[0];
//从1到3之间的元素不包括3
byte[] Len = NNN1[1..3];
byte[] Pack_SN = NNN1[3..5];
byte RetryCount = NNN1[5];
byte[] DeviceOnlyNo = NNN1[6..10];
byte[] Command = NNN1[10..12];
//校验CRC16小端模式(低地址在前)
//校验内容Pack_Head + Pack_LEN + Pack_SN + Retry_Num + Client_ID + CMD + PARA
byte[] CRCCode = NNN1[^8..^6];
//// 获取从倒数第三个元素到数组末尾的所有元素
byte[] Tail = NNN1[^6..];
string NNN2 = Tools.ByteToString(NNN1);
string str = "CM:GPIO_WRITE:5:0x19:0x01:1sdfghasada\r\n";
byte[] data = Encoding.ASCII.GetBytes(str);
// example data
//var IV = new byte[] { 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff };
//IV内容组成Pack_Head + Pack_LEN + Pack_SN + Retry_Num + Client_ID + Pack_END
//2D 2D 0D 0A 2D 2D
List<byte> IIV = new List<byte>();
IIV.Add(0xAA);
ushort llf = (ushort)GGJ.Length;
IIV.AddRange(BitConverter.GetBytes(llf).Reverse());
//加解密
byte[] bbb = Tools.HEXString2ByteArray("02 00 01 00 1D 05 29 05 20 03 F4 FF 00 00 00 00 24 04 B2 07 6B 00 39 00 1B 00 37 00 01 00".Replace(" ", ""));
byte[] IV = new byte[] { 0xAA, 0x30, 0x00, 0x36, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x2D, 0x2D, 0x0D, 0x0A, 0x2D, 0x2D };
byte[] key = new byte[] { 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c };
key = Tools.HEXString2ByteArray("35 65 6C 6B 48 58 67 76 56 58 4D 4A 6F 68 50 69".Replace(" ", ""));
IV = Tools.HEXString2ByteArray("AA 30 00 01 00 00 2F 00 00 00 2D 2D 0D 0A 2D 2D".Replace(" ", ""));
//Encrypt
AES_CTR forEncrypting = new AES_CTR(key, IV);
byte[] encryptedContent = new byte[bbb.Length];
forEncrypting.EncryptBytes(encryptedContent, bbb);
// Decrypt
AES_CTR forDecrypting = new AES_CTR(key, IV);
byte[] decryptedContent = new byte[bbb.Length];
forDecrypting.DecryptBytes(decryptedContent, bbb);
string DJIEMI = Tools.ByteToString(decryptedContent);
Console.WriteLine("Hello, World!");
}
private static Task Consumer_ReceivedAsync(object sender, BasicDeliverEventArgs ea)
{
var body = ea.Body;
var message = Encoding.UTF8.GetString(body.ToArray());
Console.WriteLine("收到消息 {0}", message);
return Task.CompletedTask;
}
public static List<(int start, int end, int density)> GetDensityRankedRanges(
List<List<int>> allSelections,
int windowSize = 3)
{
// 初始化数字计数数组
int[] counts = new int[101];
foreach (var selection in allSelections)
{
foreach (var num in selection)
{
if (num >= 1 && num <= 100) counts[num]++;
}
}
// 计算所有窗口的密度
var densityRanges = new List<(int, int, int)>();
for (int start = 1; start <= 100 - windowSize + 1; start++)
{
int end = start + windowSize - 1;
int density = 0;
for (int i = start; i <= end; i++)
{
density += counts[i];
}
densityRanges.Add((start, end, density));
}
// 按密度排序并返回
return densityRanges
.OrderByDescending(x => x)
.ToList();
}
}
}