protected override void ProcessRecord() { if (!string.IsNullOrEmpty(SubnetMask)) { WriteObject(new RouteConfig() { NetworkAddress = new AddressConfig(NetworkAddress, SubnetMask), DefaultGateway = DefaultGateway, }, true); } else if (string.IsNullOrEmpty(SubnetMask) && PrefixLength != null) { WriteObject(new RouteConfig() { NetworkAddress = new AddressConfig(NetworkAddress, (int)PrefixLength), DefaultGateway = DefaultGateway, }, true); } else if (NetworkAddress.Contains("/")) { WriteObject(new RouteConfig() { NetworkAddress = new AddressConfig(NetworkAddress), DefaultGateway = DefaultGateway, }, true); } }
public bool IsMatching(EndPoint ep) { switch (_type) { case NetProxyBypassItemType.IpAddress: if (ep is IPEndPoint ipep1) { return(_ipAddress.Equals(ipep1.Address)); } return(false); case NetProxyBypassItemType.NetworkAddress: if (ep is IPEndPoint ipep2) { return(_networkAddress.Contains(ipep2.Address)); } return(false); case NetProxyBypassItemType.DomainName: if (ep is DomainEndPoint dep) { string matchDomainName = dep.Address; if (_domainName.Length == matchDomainName.Length) { return(_domainName.Equals(matchDomainName, StringComparison.OrdinalIgnoreCase)); } else { return(matchDomainName.EndsWith("." + _domainName, StringComparison.OrdinalIgnoreCase)); } } return(false); default: throw new NotSupportedException("NetProxyBypassItemType not supported."); } }
public Task <DnsDatagram> ProcessRequestAsync(DnsDatagram request, IPEndPoint remoteEP, DnsTransportProtocol protocol, bool isRecursionAllowed, string zoneName, uint appRecordTtl, string appRecordData) { dynamic jsonAppRecordData = JsonConvert.DeserializeObject(appRecordData); dynamic jsonCname = null; foreach (dynamic jsonProperty in jsonAppRecordData) { string name = jsonProperty.Name; if ((name == "public") || (name == "private")) { continue; } NetworkAddress networkAddress = NetworkAddress.Parse(name); if (networkAddress.Contains(remoteEP.Address)) { jsonCname = jsonProperty.Value; break; } } if (jsonCname is null) { if (NetUtilities.IsPrivateIP(remoteEP.Address)) { jsonCname = jsonAppRecordData.@private; } else { jsonCname = jsonAppRecordData.@public; } if (jsonCname is null) { return(Task.FromResult <DnsDatagram>(null)); } } string cname = jsonCname.Value; if (string.IsNullOrEmpty(cname)) { return(Task.FromResult <DnsDatagram>(null)); } DnsQuestionRecord question = request.Question[0]; IReadOnlyList <DnsResourceRecord> answers; if (question.Name.Equals(zoneName, StringComparison.OrdinalIgnoreCase)) //check for zone apex { answers = new DnsResourceRecord[] { new DnsResourceRecord(question.Name, DnsResourceRecordType.ANAME, DnsClass.IN, appRecordTtl, new DnsANAMERecordData(cname)) } } ; //use ANAME else { answers = new DnsResourceRecord[] { new DnsResourceRecord(question.Name, DnsResourceRecordType.CNAME, DnsClass.IN, appRecordTtl, new DnsCNAMERecordData(cname)) } }; return(Task.FromResult(new DnsDatagram(request.Identifier, true, request.OPCODE, true, false, request.RecursionDesired, isRecursionAllowed, false, false, DnsResponseCode.NoError, request.Question, answers))); }
public Task <DnsDatagram> ProcessRequestAsync(DnsDatagram request, IPEndPoint remoteEP, DnsTransportProtocol protocol, bool isRecursionAllowed, string zoneName, uint appRecordTtl, string appRecordData) { DnsQuestionRecord question = request.Question[0]; switch (question.Type) { case DnsResourceRecordType.A: case DnsResourceRecordType.AAAA: dynamic jsonAppRecordData = JsonConvert.DeserializeObject(appRecordData); dynamic jsonAddresses = null; foreach (dynamic jsonProperty in jsonAppRecordData) { string name = jsonProperty.Name; if ((name == "public") || (name == "private")) { continue; } NetworkAddress networkAddress = NetworkAddress.Parse(name); if (networkAddress.Contains(remoteEP.Address)) { jsonAddresses = jsonProperty.Value; break; } } if (jsonAddresses is null) { if (NetUtilities.IsPrivateIP(remoteEP.Address)) { jsonAddresses = jsonAppRecordData.@private; } else { jsonAddresses = jsonAppRecordData.@public; } if (jsonAddresses is null) { return(Task.FromResult <DnsDatagram>(null)); } } List <DnsResourceRecord> answers = new List <DnsResourceRecord>(); switch (question.Type) { case DnsResourceRecordType.A: foreach (dynamic jsonAddress in jsonAddresses) { IPAddress address = IPAddress.Parse(jsonAddress.Value); if (address.AddressFamily == AddressFamily.InterNetwork) { answers.Add(new DnsResourceRecord(question.Name, DnsResourceRecordType.A, DnsClass.IN, appRecordTtl, new DnsARecordData(address))); } } break; case DnsResourceRecordType.AAAA: foreach (dynamic jsonAddress in jsonAddresses) { IPAddress address = IPAddress.Parse(jsonAddress.Value); if (address.AddressFamily == AddressFamily.InterNetworkV6) { answers.Add(new DnsResourceRecord(question.Name, DnsResourceRecordType.AAAA, DnsClass.IN, appRecordTtl, new DnsAAAARecordData(address))); } } break; } if (answers.Count == 0) { return(Task.FromResult <DnsDatagram>(null)); } if (answers.Count > 1) { answers.Shuffle(); } return(Task.FromResult(new DnsDatagram(request.Identifier, true, request.OPCODE, true, false, request.RecursionDesired, isRecursionAllowed, false, false, DnsResponseCode.NoError, request.Question, answers))); default: return(Task.FromResult <DnsDatagram>(null)); } }