65 lines
2.1 KiB
C#
65 lines
2.1 KiB
C#
#if ENABLE_MONO && (DEVELOPMENT_BUILD || UNITY_EDITOR)
|
|
#if UNITY_ANDROID && !UNITY_EDITOR
|
|
#define MOBILE_ANDROID
|
|
#endif
|
|
#if UNITY_IOS && !UNITY_EDITOR
|
|
#define MOBILE_IOS
|
|
#endif
|
|
#if MOBILE_ANDROID || MOBILE_IOS
|
|
#define MOBILE
|
|
#endif
|
|
|
|
using System;
|
|
using System.Net.NetworkInformation;
|
|
using System.Net.Sockets;
|
|
|
|
namespace SingularityGroup.HotReload {
|
|
static class IpHelper {
|
|
// get my local ip address
|
|
|
|
static DateTime cachedAt;
|
|
static string ipCached;
|
|
public static string GetIpAddressCached() {
|
|
if (string.IsNullOrEmpty(ipCached) || DateTime.UtcNow - cachedAt > TimeSpan.FromSeconds(5)) {
|
|
ipCached = GetIpAddress();
|
|
cachedAt = DateTime.UtcNow;
|
|
}
|
|
return ipCached;
|
|
}
|
|
|
|
public static string GetIpAddress() {
|
|
var ip = GetLocalIPv4(NetworkInterfaceType.Wireless80211);
|
|
|
|
if (string.IsNullOrEmpty(ip)) {
|
|
return GetLocalIPv4(NetworkInterfaceType.Ethernet);
|
|
}
|
|
return ip;
|
|
}
|
|
|
|
private static string GetLocalIPv4(NetworkInterfaceType _type) {
|
|
string output = "";
|
|
foreach (NetworkInterface item in NetworkInterface.GetAllNetworkInterfaces()) {
|
|
if (item.NetworkInterfaceType == _type && item.OperationalStatus == OperationalStatus.Up) {
|
|
foreach (UnicastIPAddressInformation ip in item.GetIPProperties().UnicastAddresses) {
|
|
if (ip.Address.AddressFamily == AddressFamily.InterNetwork && IsLocalIp(ip.Address.MapToIPv4().GetAddressBytes())) {
|
|
output = ip.Address.ToString();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return output;
|
|
}
|
|
|
|
// https://datatracker.ietf.org/doc/html/rfc1918#section-3
|
|
static bool IsLocalIp(byte[] ipAddress) {
|
|
return ipAddress[0] == 10
|
|
|| ipAddress[0] == 172
|
|
&& ipAddress[1] >= 16
|
|
&& ipAddress[1] <= 31
|
|
|| ipAddress[0] == 192
|
|
&& ipAddress[1] == 168;
|
|
}
|
|
}
|
|
}
|
|
#endif
|