2023-07-29 23:37:10 +05:30

115 lines
2.0 KiB
C#

using System;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Reflection;
using cGeoIp;
using Server.Properties;
namespace Server.Helper;
public class Utils
{
private static cGeoMain cGeo = new cGeoMain();
public static Resources rc = new Resources();
public static string LocalIP
{
get
{
try
{
string result;
using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.IP))
{
socket.Connect("8.8.8.8", 65530);
result = (socket.LocalEndPoint as IPEndPoint).Address.ToString();
socket.Close();
}
return result;
}
catch
{
}
return string.Empty;
}
}
private static bool IsPrivate(string ipAddress)
{
try
{
int[] array = (from s in ipAddress.Split(new string[1] { "." }, StringSplitOptions.RemoveEmptyEntries)
select int.Parse(s)).ToArray();
if (array[0] == 10 || (array[0] == 192 && array[1] == 168) || (array[0] == 172 && array[1] >= 16 && array[1] <= 31))
{
return true;
}
}
catch
{
}
return false;
}
public static string GetSizeString(long size)
{
string[] array = new string[5] { "B", "KB", "MB", "GB", "TB" };
int num = 0;
float num2 = size;
while (num2 >= 1024f)
{
num2 /= 1024f;
num++;
}
return $"{num2:F1}{array[num]}";
}
public static string GetCountryName(string ip)
{
try
{
return cGeo.GetIpInf(ip).Split(':')[1];
}
catch
{
}
if (!IsPrivate(ip))
{
return "UnKnown";
}
return "Private";
}
public static string GetCountryCode(string ip)
{
try
{
return cGeo.GetIpInf(ip).Split(':')[2];
}
catch
{
}
try
{
return cGeo.GetIpInf(LocalIP).Split(':')[2];
}
catch
{
}
return "";
}
public static Bitmap GetCountryFlag(string code)
{
PropertyInfo property = rc.GetType().GetProperty(code);
if (property != null)
{
return (Bitmap)property.GetValue(code);
}
return null;
}
}