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

2024-05-24

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

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

如何使用 C# 代码更改网络设置(IP 地址、DNS、WINS、主机名) https://stackoverflow.com/questions/209779/how-can-you-change-network-settings-ip-address-dns-wins-host-name-with-code

在C#中更改IP地址 https://stackoverflow.com/questions/7501203/changing-ip-address-in-c-sharp

我编写了与第一个链接的答案相同的代码,并且还使用了这些库,但是当我通过 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<ManagementObject>().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);
                            }
                        }
                    }
                }
            }
        }
    }

    /// <summary>
    /// Set's the DNS Server of the local machine
    /// </summary>
    /// <param name="nic">NIC address</param>
    /// <param name="dnsServers">Comma seperated list of DNS server addresses</param>
    /// <remarks>Requires a reference to the System.Management namespace</remarks>
    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<ManagementObject>().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 地址块后面操作,并且只想欺骗该块中的另一个 IP 地址,则返回地址将返回到您的本地路由器,但仍然不需要路由回您。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 C# 中更改公共 IP 地址 的相关文章

  • Cmake 链接共享库:包含库中的头文件时“没有这样的文件或目录”

    我正在学习使用 CMake 构建库 构建库的代码结构如下 include Test hpp ITest hpp interface src Test cpp ITest cpp 在 CMakeLists txt 中 我用来构建库的句子是 f
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • C++ 函数重载类似转换

    我收到一个错误 指出两个重载具有相似的转换 我尝试了太多的事情 但没有任何帮助 这是那段代码 CString GetInput int numberOfInput BOOL clearBuffer FALSE UINT timeout IN
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com
  • 从列表中选择项目以求和

    我有一个包含数值的项目列表 我需要使用这些项目求和 我需要你的帮助来构建这样的算法 下面是一个用 C 编写的示例 描述了我的问题 int sum 21 List
  • 当我使用 OpenSSL1.1.0g 根据固定的 p 和 g 值创建 Diffie Hellman 密钥协议密钥时,应该执行哪些检查?

    您好 我尝试通过这段代码使用修复 p 和 g 参数来制作 Diffie Hellman Keysanswer https stackoverflow com a 54538811 4706711 include
  • 运行 Azure 函数时路径中存在非法字符

    我有一个 Azure 函数 它已经运行了一整天 大约二十分钟前 当我尝试单击 Visual Studio 中的运行按钮时 开始出现错误 它成功构建 然后在启动时显示并错误 仅指出 路径中的非法字符 Visual Studio 我检查了 gi
  • 无法通过预处理器指令将字符串小写转换为大写

    我制作了一个将字符串小写转换为大写的程序 我知道如何通过预处理器指令将字符转换为大写 但我不知道如何对字符串执行此操作 include
  • Signal R Native Android 应用程序协商失败

    我正在尝试创建一个可以连接到我的基本 SignalR Hub 的 Android 应用程序 它只是一个基本的集线器文件 我想用它来测试一些东西 但到目前为止我还没有运气 有人可以看看我做错的事情吗 每次我尝试运行它时 我都会收到以下堆栈竞赛
  • ASP.NET Core Api-网关中间件

    我是API网关新手 有一个理解问题 我也尝试将一系列 微 服务放在端点后面 为此 我设置了一个 ASP NET Core 应用程序并添加了包三哺乳动物豹猫 https github com ThreeMammals Ocelot 在文档的帮
  • typedef 指针是个好主意吗?

    我查看了一些代码 发现约定是将指针类型转换为 SomeStruct into typedef SomeStruct pSomeStruct 这有什么优点吗 当指针本身可以被视为 黑匣子 时 即其内部表示应该与代码无关的一段数据时 这可能是合
  • 空 catch 与 try-catch 语句中的“catch Exception”相同吗?

    try catch Exception 我可以写吗 try catch 这在 C NET 3 5 中可以吗 代码看起来更好 但我不知道是否相同 他们是not一样的 catch Exception 将仅捕获托管异常 catch 也会捕获非 C
  • 类继承通用字典和Interface

    我有一个继承通用字典和接口的类 public class MyDictionary Dictionary
  • Swagger 不生成 swagger.json

    我在一个解决方案中拥有 asp net core MVC 项目和单独的 WebApi 项目 我按照 github 上的文档添加了 swagger 这是我的 mvc 项目的 Startup cs public void ConfigureSe
  • C++ 数组中的多字节 UTF-8

    我在处理数组中的 3 字节 Unicode UTF 8 字符时遇到了问题 当它们位于 char 数组中时 我收到多字符字符常量和隐式常量转换警告 但当我使用 wchar t 数组时 wcout 根本不返回任何内容 由于项目的性质 它必须是数
  • minidump stackwalk 与 gdb 回溯

    我的 Firefox 中有一个漏洞触发器 CVE 2018 18492 它会崩溃并给出 SIGSEGV 我用过breakpadminidump stackwalk从崩溃时生成的小型转储文件中获取其堆栈跟踪 我得到如下内容 Thread 0
  • 从数据表中删除列

    我有一个包含 20 列的数据表 但我不需要当前处理的所有列 除了 5 列 所以我执行了以下操作来删除列 List
  • 除法未输出正确答案c++

    我是 C 新手 我正在尝试编写一个基本的数学程序来热身于该语言 当我尝试解决 9 2 问题或任何带有小数的问题时 答案似乎是错误的 我想要 4 50 的输出 但我一直得到 4 00 造成这种情况的原因是什么以及如何预防 谢谢 double
  • 为什么 XRecordDisableContext() 不起作用?

    void Callback XPointer XRecordInterceptData pRecord std cout lt lt my logs n int main if auto const pDisplay XOpenDispla
  • 将不同的单词保存到链接列表中

    基本上我这里有两个链接列表 列表和不同的 有几组单词之前已保存到 列表 结构中 我要编写一个程序 它会找到不同 唯一的单词并将其保存到 不同 结构中 这是我到目前为止根据我的指针概念得到的结果 然而 当我尝试打印 distinct 时 程序

随机推荐

  • 立即调用 Swift UIView animateWithDuration 完成闭包

    我期望在指定的持续时间后调用此 UIView 动画的完成闭包 但它似乎立即触发 UIView animateWithDuration Double 0 2 animations self frame CGRectMake 0 self bo
  • 如何在elasticsearch索引中一起使用ngram和edge ngram tokenizer?

    我有一个包含 3 个文档的索引 firstname Anne lastname Borg firstname Leanne lastname Ray firstname Anne middlename M
  • 如何使用 jQuery 检测浏览器是否关闭

    我需要使用 jQuery 检测浏览器是否被关闭 如果是这样 则执行一个事件 我的网站上有一个聊天功能 很像 Facebook 可以让用户在导航到网站结构中的其他页面时保持登录状态 但如果他们单击 则需要将他们从聊天中注销 这样他们就不会在线
  • Java 相当于 Python 的 urllib.urlencode(基于 HashMap 的 UrlEncode)

    From https stackoverflow com questions 2018026 should i use urllib or urllib2 2018103 2018103 Java 中 Python 的 urllib url
  • 角度距离计算

    我正在使用角度制作距离计算应用程序 Html
  • 从文本文件更新 wiki 消息

    是否可以让我的 wiki 从 txt 文件加载一行文本并将其显示在主页上的某个位置 像 每日消息 这样直接来自 txt 文件并且不涉及手动编辑 wiki 的东西 我的wiki运行在Ubuntu Mate上 如下 UPDATE 根据亚历山大的
  • 在模块中使用shiny的renderUI

    这是我在 stackoverflow 上的第一个问题 我在闪亮 1 0 5 中遇到模块和 renderUI 的问题 当我在中使用 renderUI 时 Main Part ui lt bootstrapPage uiOutput Dynam
  • R 中的整数或双精度列表

    我有一个大约 1000 个整数的列表 我需要能够进行一些数学计算 但它们被困在列表或字符形式中 我怎样才能切换它们以便它们可用 样本数据 gt y 1 1 7 3 1 6 7 1 7 6 5 3 1 3 3 0 6 2 4 9 19 1 9
  • 用户的完整 UNIX 用户名

    想知道您是否知道是否有一种巧妙的方法可以从 shell 获取完整的用户名 示例 如果我的 UNIX 用户名是 froyo 那么我想获取我的全名 在本例中 如系统中注册的那样 froyo Abhishek Pratap Finger 命令可以
  • 如何以编程方式伪造 UIButton 的触摸事件?

    我正在编写一些单元测试 并且由于这个特定应用程序的性质 重要的是我要达到尽可能高的水平UI链尽可能 因此 我想做的是以编程方式触发按钮按下 就好像用户按下了按钮一样GUI 是的 是的 我could只需致电IBAction选择器 但同样 这个
  • 树的子节点/节点上的单击事件

    我真的对 ExtJs 树对象感到困惑 我的代码有问题 但我不知道是什么 考虑我有这个代码 var store Ext create Ext data TreeStore root expanded true children text de
  • 在Python中打开网站框架或图像

    所以我对 python 相当熟练 并且经常使用 urllib2 和 Cookies 来实现网站自动化 我刚刚偶然发现了 webbrowser 模块 它可以在默认浏览器中打开一个网址 我想知道是否可以从该 url 中仅选择一个对象并打开它 具
  • Javascript For 循环在 dom 元素上执行[重复]

    这个问题在这里已经有答案了 我有 javascript 代码来获取具有类名称的元素 并迭代从元素中删除该类 var elements document getElementsByClassName test console log Leng
  • 在线和离线管理 iPhone 应用程序

    我被困在一个点上 我也在离线管理我的应用程序 第一次我从网络服务获取所有配置文件数据并将其路径存储到 sqlite 中时 我在更新这些数据时遇到问题 例如如果图像发生更改 我应该如何通知我的应用程序 我在 Google 上搜索了它 唯一的解
  • C#:自定义转换为值类型

    是否可以将自定义类转换为值类型 这是一个例子 var x new Foo var y int x Does not compile 是否有可能实现上述情况 我需要超载一些东西吗Foo 您将必须重载强制转换运算符 public class F
  • DataGridView 行背景颜色没有改变

    我想根据加载时的特定条件更改 DGV 行的背景颜色 即使在 Windows 窗体中也是如此 但我看不到任何 DGV 行的颜色有任何变化 谁能告诉我如何解决这个问题 private void frmSecondaryPumps Load ob
  • CoreGraphics 在 iPhone4 上比在 3G/3GS 上慢

    我有一个用 CoreGraphics 绘制的图表 该图表可以水平滚动 并且当我们滚动它时就会绘制它 问题是 在 3G 3GS 上 滚动的速度和性能良好 但在 iPhone 4 上却比预期慢 我认为这是与 iPhone 4 的高分辨率有关的问
  • 使用循环(或向量化)按向量中的多个元素对列表进行子集化

    我有3个清单data frames my list lt list a data frame value c 1 5 class c letters 1 3 a b b data frame value c 6 1 class c lett
  • Devise + CanCan 只是阻止其他用户编辑对象

    您如何防止其他用户编辑对象 例如不属于自己的配置文件对象 大多数在线示例都是具有多个用户角色的复杂示例 我无法使其正常工作 但必须很简单 def initialize user can update Profile do profile p
  • 如何在 C# 中更改公共 IP 地址

    我正在创建一个 C winform 应用程序 我想在其中更改公共 IP 地址 而不是像 Hotspot Shield ZenMate OpenVPN 等那样更改 IPv4 地址 我已经检查了以下链接 但没有找到足够的帮助 所以我发布了这个问