2022年08月23日

1. ServiceController.cs

请求内容类型:

[HttpPost]
[Consumes("application/xml")] // 请求内容类型

1.获取客户端ip

var ip = context.Request.Headers["X-Forwarded-For"].FirstOrDefault();
if (string.IsNullOrEmpty(ip))
{
    ip = context.Connection.RemoteIpAddress.ToString();
}

2. LoginController.cs

解密

从指定的字符串加载 XML 文档。

// Create the XmlDocument.
XmlDocument doc = new XmlDocument();
doc.LoadXml("<item><name>wrench</name></item>");

获取用户数据:

“GetUserData”

获取用户系统信息 :

“GetUserSysData”

3. RegCenterController.cs

3.1 UserLogin(RegUserLogin reguser)授权登录

登录成功后,获取或设置用于管理此请求的用户会话数据的对象。

//Encoding.UTF8:获取 UTF-8 格式的编码。 GetBytes:将指定字符串中的所有字符编码为一个字节序列。
HttpContext.Session.Set("usercode", System.Text.Encoding.UTF8.GetBytes(mUserCode));     //mUserCode:账号
return RedirectToAction(nameof(Index)); //使用 actionName () Status302Found 重定向到指定的操作。

登录成功后,后续的请求头中带有参数:

Cookie: .AspNetCore.Session=CfDJ8E4uv7iyr91HrL%2BDe3iDEY0Y0FaG9q%2FrfrSE%2BwCcmPKHuhnj1%2Beqc5Cdi4l3C3BsjWBBCTcy8jygBJvZp46KTh4jV3v6vp1xRLcb91gzt58cme4hSRGWa6YlJ8%2BhiIIl1Yt4KZTYMWirFBlcDDhfVlDA27OYDUOiIa3c2qJXgZIY

判断是否带Cookie

byte[] mResult = null;
HttpContext.Session.TryGetValue("usercode", out mResult);
if (mResult == null) return RedirectToAction(nameof(UserLogin));

3.2 MacView()获取MAC

获取MAC

image-20220823195716596
List<string> mMacList = new List<string>();
try
{
    mMacList.Clear();
    var networks = NetworkInterface.GetAllNetworkInterfaces(); //返回描述本地计算机上的网络接口的对象。
    foreach (var network in networks)
    {
        if (network.NetworkInterfaceType == NetworkInterfaceType.Ethernet) //网络接口使用以太网连接
        {
            var physicalAddress = network.GetPhysicalAddress(); //返回此适配器的媒体访问控制 (MAC) 或物理地址。
            string macAddressStr = string.Join(":", physicalAddress.GetAddressBytes().Select(b => b.ToString("X2")));
            macAddressStr = macAddressStr.Replace("-", "").Replace(":", "").ToUpper();
            if (!mMacList.Contains(macAddressStr))
            {
                mMacList.Add(macAddressStr);
            }
            Console.WriteLine(macAddressStr);
        }
    }
}
catch { }
return mMacList;

3.3 EditReg(RegData regdata)导入授权

3.3.1 获取授权

授权文件读取字符串,获取授权:

public static RegEntity f_CheckLicense(string pLicense, string pSignKey, ref string pErr)

把pLicense(base64字符串)还原,反序列化为RegEntity类(注册信息),获取MAC并验证是否与注册信息一致。

3.3.2 获取验签数据

将注册信息(RegEntity类)和程序注册签名密钥pSignKey(Startup.cs请求管道中已指定密钥)

public static string f_GetSingAture(RegEntity pRegEntity, string pSignKey)

验签字符串:机构名称+mac地址+系统类型和授权数+创建时间

string mRegEntityStr = ""; //验签字符串
//...拼接验签字符串
using (HMACSHA256 mac = new HMACSHA256(Encoding.UTF8.GetBytes(pSignKey)))
{
    byte[] hash = mac.ComputeHash(Encoding.UTF8.GetBytes(mRegEntityStr));
    signRet = Convert.ToBase64String(hash);
}
return mRegEntityStr;

判断验签字符串与注册信息(mRegEntity)的验签字符串是否一致:

if (mRegEntity.singature != mRegEntityStr) return; //不一致
return mRegEntity; //一致

3.3.3 修改或新增

判断iid是否存在,存在则修改,不存在则新增。


远程连接桌面:win+R,输入 mstsc

连接Windows Server 2008 R2,使用IIS部署 .NET Core项目。

image-20220823200242322

应用池设置:

image-20220823200443830

应用池高级设置:

image-20220823200715336

网站编辑绑定:

修改http、https,端口等

image-20220823200934953