如何在C#中更改公共IP地址

我正在创建一个C#winform应用程序,我想在其中更改公共IP地址,而不是像(Hotspot-Shield,ZenMate,OpenVPN和其他人那样)更改IPv4地址。

我检查了以下链接但没有找到足够的帮助,所以我发布了这个问题:

如何使用C#中的代码更改网络设置(IP地址,DNS,WINS,主机名)

在C#中更改IP地址

我写了与第一个链接的答案相同的代码,也使用了库,但是当我通过google.com检查我的IP地址时,它仍然是相同的。 我不知道socket编程。

这是我的代码:

namespace WindowsFormsApplication1 { class ChangeIP { public void SetIP(string ipAddress, string subnetMask, string gateway) { using (var networkConfigMng = new ManagementClass("Win32_NetworkAdapterConfiguration")) { using (var networkConfigs = networkConfigMng.GetInstances()) { foreach (var managementObject in networkConfigs.Cast().Where(managementObject => (bool)managementObject["IPEnabled"])) { using (var newIP = managementObject.GetMethodParameters("EnableStatic")) { // Set new IP address and subnet if needed if ((!String.IsNullOrEmpty(ipAddress)) || (!String.IsNullOrEmpty(subnetMask))) { if (!String.IsNullOrEmpty(ipAddress)) { newIP["IPAddress"] = new[] { ipAddress }; } if (!String.IsNullOrEmpty(subnetMask)) { newIP["SubnetMask"] = new[] { subnetMask }; } managementObject.InvokeMethod("EnableStatic", newIP, null); } // Set mew gateway if needed if (!String.IsNullOrEmpty(gateway)) { using (var newGateway = managementObject.GetMethodParameters("SetGateways")) { newGateway["DefaultIPGateway"] = new[] { gateway }; newGateway["GatewayCostMetric"] = new[] { 1 }; managementObject.InvokeMethod("SetGateways", newGateway, null); } } } } } } } ///  /// Set's the DNS Server of the local machine ///  /// NIC address /// Comma seperated list of DNS server addresses /// Requires a reference to the System.Management namespace public void SetNameservers(string nic, string dnsServers) { using (var networkConfigMng = new ManagementClass("Win32_NetworkAdapterConfiguration")) { using (var networkConfigs = networkConfigMng.GetInstances()) { foreach (var managementObject in networkConfigs.Cast().Where(objMO => (bool)objMO["IPEnabled"] && objMO["Caption"].Equals(nic))) { using (var newDNS = managementObject.GetMethodParameters("SetDNSServerSearchOrder")) { newDNS["DNSServerSearchOrder"] = dnsServers.Split(','); managementObject.InvokeMethod("SetDNSServerSearchOrder", newDNS, null); } } } } } } } 

以下是我调用这些方法的方法:

 { static string local_ip; string public_ip; public static string GetLocalIPAddress() //Method For Getting Local Machine IP { var host = Dns.GetHostEntry(Dns.GetHostName()); foreach (var ip in host.AddressList) { if (ip.AddressFamily == AddressFamily.InterNetwork) { return ip.ToString(); } } throw new Exception("Local IP Address Not Found!"); } // Mehod End local_ip = GetLocalIPAddress(); ChangeIP ip = new ChangeIP(); ip.SetIP(local_ip, null, null); // Calling Method var getNIC = NetworkInterface.GetAllNetworkInterfaces(); NetworkInterface[] NI = NetworkInterface.GetAllNetworkInterfaces(); string nic = string.Empty; string dnsServer = string.Empty; foreach(var r in getNIC) { nic = r.Name; } foreach(NetworkInterface ninter in NI) { if(ninter.OperationalStatus == OperationalStatus.Up) { IPInterfaceProperties ipProperties = ninter.GetIPProperties(); IPAddressCollection dnsAddresses = ipProperties.DnsAddresses; foreach(IPAddress dnsAdrs in dnsAddresses) { dnsServer = dnsAdrs.ToString(); } } } ip.SetNameservers(nic, dnsServer); // Calling Method public_ip = new WebClient().DownloadString("http://icanhazip.com"); } 

你如何描述你的问题不是互联网(应该如何)的工作方式。

Windows不允许您写入原始IP数据包,为此您需要使用TAP / TUN驱动程序。 但是,虽然您发送欺骗源IP地址的数据包,但您和目的地之间的互联网将不会返回路由。

如果您在一个IP地址块后面操作,并且只想在该块中欺骗另一个,则返回地址将返回到您的本地路由器,但仍然无需返回给您。

除非您使用TAP / TUN,否则没有其他方法可以窃取其他人的公共IP地址,不包括超出本论坛范围的其他网络安全漏洞利用。

即使使用TAP / TUN,您在一个方向上可以通过欺骗性IP数据包实现的目标非常有限。 实际上,ISP可能会过滤掉欺骗的IP地址。