- /// <summary>
- /// 会话
- /// </summary>
- public class NessusSession : IDisposable
- {
- /// <summary>
- /// 端口
- /// </summary>
- public int Port { get; set; }
- /// <summary>
- /// 主机
- /// </summary>
- public string Host { get; set; }
- /// <summary>
- /// 令牌
- /// </summary>
- public string Token { get; private set; }
- /// <summary>
- /// 认证标识
- /// </summary>
- public bool IsAuthenticated { get; private set; }
- #region ctor
- public NessusSession()
- {
- ServicePointManager.ServerCertificateValidationCallback = (object obj, X509Certificate certificate,
- X509Chain chain, SslPolicyErrors errors) => true;
- }
- public NessusSession(string host, int port = 8834) : this()
- {
- Host = host;
- Port = port;
- }
- #endregion ctor
- /// <summary>
- /// 认证
- /// </summary>
- /// <param name="userName"></param>
- /// <param name="password"></param>
- /// <returns></returns>
- public bool Authenticate(string userName, string password)
- {
- var obj = new JObject
- {
- ["username"] = userName,
- ["password"] = password
- };
- var result = MakeRequest(HttpRequestMethod.Post, "session", obj);
- if (result == null || result.token == null)
- {
- return false;
- }
- Token = result.token;
- return IsAuthenticated = true;
- }
- /// <summary>
- /// 请求
- /// </summary>
- /// <param name="method"></param>
- /// <param name="uri"></param>
- /// <param name="data"></param>
- /// <returns></returns>
- public dynamic MakeRequest(string method, string uri, JObject data = null)
- {
- var url = $"https://{Host}:{Port}/{uri}";
- var request = webRequest.Create(url);
- request.Method = method;
- if (!Token.IsNullOrEmpty())
- {
- request.Headers["X-Cookie"] = $"token={Token}";
- }
- //set: json
- request.ContentType = "application/json";
- if (data == null)
- {
- request.ContentLength = 0;
- }
- else
- {
- var bytes = Encoding.UTF8.GetBytes(data.ToString());
- request.ContentLength = bytes.Length;
- using (var rs = request.GetRequestStream())
- {
- rs.Write(bytes, 0, bytes.Length);
- }
- }
- //request --> response
- var respStream = request.GetResponse().GetResponseStream();
- if (respStream == null)
- {
- return null;
- }
- string response;
- using (var reader = new StreamReader(respStream))
- {
- response = reader.ReadToEnd();
- }
- return response.IsNullOrEmpty() ? null : response.ToJson();
- }
- /// <summary>
- /// 注销
- /// </summary>
- public void LogOut()
- {
- if (!IsAuthenticated) return;
- MakeRequest(HttpRequestMethod.Delete, "session");
- IsAuthenticated = false;
- }
- public void Dispose()
- {
- LogOut();
- }
- }
来源: https://www.cnblogs.com/liqingwen/p/9201834.html