最近做的一个产品中有个需求,就是客户使用的时候可以通过Web网页修改服务器的IP地址(客户是普通使用者,没有Linux使用经验,我们的产品作为一台服务器部署到客户机房,客户通过HTTP方式访问使用)。
在Linux中一切皆是文件,修改IP地址同样是只要修改了对应网卡的配置文件后重启网络服务,只要配置正确无IP冲突,即可成功启用新的IP地址。
所以我们实现的思路是访问网卡配置文件,获取当前网卡的配置信息展示(如果有多个网卡就展示多个网卡信息,用tab来切换网卡信息),然后用户可以修改对应的网卡网络信息提交保存,后台通过修改网卡对应的文件内容,即可达到修改网卡IP地址的功能。
当然因为要访问修改网卡配置文件和执行重启网络的命令,对Web的权限有一定的要求,因为客户是内网运行,简单粗暴的使用了root用户来启动Web程序。
以下代码实现了ASP.NET Core修改CentOS的IP地址功能。
前端使用的是LayUI
@H_404_12@1 @model viewmodel.IPVm 2 @{ 3 var ipList = Model.IpList; 4 } 5 6 <div class="layui-bg-gray" style="padding: 30px;"> 7 ="layui-row layui-col-space15" 8 ="layui-col-md6" 9 ="layui-card"="min-height: 280px;" 10 ="layui-card-header" 11 配置服务器IP 12 </div 13 ="layui-card-body" 14 ="layui-tab-item layui-show" id="tbcontent_0" lay-filter="tbcontent_0filter" 15 @{ 16 17 if (ipList != null && ipList.Any()) 18 { 19 ul ="layui-tab-title" 20 21 @{ 22 for (int i = 0; i ipList.Count; i++) 23 { 24 var ip = ipList[i]; 25 <li>@ip.IpNameli 26 } 27 } 28 ul 29 30 ="layui-tab-content" 31 @{ 32 for (int i = 0; i 33 34 35 var i1 = i; 36 <div class="layui-tab-item"="tbcontent_@i"="tbcontent_1filter" 37 38 ="layui-form-item layui-form"="Ipv4div_@i1" 39 label for="Ipv4div_@i1" class="layui-form-label"="width: 100px">IPv4地址:label 40 ="layui-input-block"="margin-left: 130px" 41 input autocomplete="off" type="text" name="Ipv4div_txt_@i1" value="@ip.Ipv4" maxlength="15" placeholder="请填写IPv4的IP地址"="layui-input"="Ipv4div_txt_@i1" 42 43 44 ="IpMaskdiv_@i1" 45 ="IpMaskdiv_@i1">子网掩码: 46 47 ="IpMaskdiv_txt_@i1"="@ip.IpMask"="请填写IPv4的子网掩码"="IpMaskdiv_txt_@i1" 48 49 50 ="IpGetWaydiv_@i1" 51 ="IpGetWaydiv_@i1">网关地址: 52 53 ="IpGetWay_txt_@i1"="@ip.IpGetWay"="请填写IPv4的网关地址"="IpGetWay_txt_@i1" 54 55 56 ="IpDnsdiv_@i1" 57 ="IpDnsdiv_@i1">DNS地址: 58 59 ="IpDnsdiv_txt_@i1"="@ip.IpDns"="请填写IPv4的DNS地址"="IpDnsdiv_txt_@i1" 60 61 62 type="hidden"="@ip.IpGuid"="32"="IpGuid_@i1"="IpGuid_@i1" /> 63 ="@ip.IpName"="IpName_@i1"="IpName_@i1" 64 button onclick="SaveIpConfig(this);"="button"="layui-btn"="btn_@i"="btn_@i filter">提交修改button 65 66 67 68 69 } 70 } 71 72 73 74 75 76 77 script ="text/javascript" 78 var element = layui.element; 79 layui.use('layer); 80 81 function SaveIpConfig(e) { 82 btnId $(e).attr(id 83 84 if (btnId == '' ||== undefined) return; 85 86 id btnId.split(_ 87 88 (id.length != 2) 89 90 ip $("#Ipv4div_txt_" + id[1]).val(); 91 mask #IpMaskdiv_txt_ 92 getWay #IpGetWay_txt_ 93 dns #IpDnsdiv_txt_ 94 nid #IpGuid_ 95 ipName #IpName_ 96 97 ($.trim(ip) '') { 98 layer.alert(请填写IP地址, 99 { 100 title: 错误' 101 }); 102 103 } else { 104 (!validateIP($.trim(ip))) { 105 layer.alert(IP地址格式不正确106 { 107 title: 108 }); 109 110 } 111 } 112 113 (mask.trim() 114 请填写子网掩码115 title: 116 }); 117 118 119 validateIP($.trim(mask))) { 120 子网掩码格式不正确121 122 123 124 125 126 127 128 ($.trim(getWay) && validateIP($.trim(getWay))) { 129 网关地址格式不正确130 131 132 133 134 135 ($.trim(dns) validateIP($.trim(dns))) { 136 DNS格式不正确137 138 139 140 141 142 layer.confirm(确定要修改服务器IP吗?!143 { icon: 3信息 },1)">144 (index) { 145 layer.close(index); 146 index layer.load(0147 $.ajax({ 148 type: POST149 url: /ChangeIp/SaveIpConfig150 data: { ip: ip,mask: mask,getWay: getWay,dns: dns,nid: nid,ipName: ipName},1)">151 dataType: json152 success: (result) { 153 (result && result undefined154 (result.code 200155 layer.alert(result.msg,1)">156 { 157 title: 158 }); 159 160 } 161 layer.alert(修改成功,请3秒后访问新的IP地址来使用系统。162 163 成功164 165 166 167 168 layer.alert(返回数据错误。169 title: 170 }); 171 172 },1)">173 complete: (xhr,ts) { 174 layer.close(index); 175 } 176 177 return false178 179 } 180 validateIP(str) { 181 re = /^(?:(?:2[0-4][0-9]\.)|(?:25[0-5]\.)|(?:1[0-9][0-9]\.)|(?:[1-9][0-9]\.)|(?:[0-9]\.)){3}(?:(?:2[0-4][0-9])|(?:25[0-5])|(?:1[0-9][0-9])|(?:[1-9][0-9])|(?:[0-9]))$182 re.test(str); 183 184 script>