iptables中增加/删除/查询/修改的基本操作

by admin on 2019年9月3日

初识Jquery
EasyUI看了一些博主用其开发出来的项目,页面很炫,感觉功能挺强大,效果也挺不错,最近一直想系统学习一套前台控件,于是在网上找了一些参考示例。写了一些基本的增删改查功能,算是对该控件的基本入门。后续有时间继续深入学习。

前台代码:

虽然在Ubuntu使用了UFW来简化iptables的操作,但是UFW只针对防火墙方面,转发方面没有涉及,所以要弄懂其中的原理,还是必须回归到iptables中。CentOS也是如此。下面是针对iptables的基本操作,无论CentOS还是Ubuntu都是一致的。

本篇讲列表的操作与维护

在学习jquery
easyui前应该先到官网下载最新版本

<div>
        <asp:DetailsView ID="gvDepart" runat="server" AutoGenerateRows="False" OnItemDeleting="gvDepart_ItemDeleting" OnItemInserting="gvDepart_ItemInserting" OnItemUpdating="gvDepart_ItemUpdating" OnModeChanging="gvDepart_ModeChanging" DataKeyNames="DepartId">
            <Fields>
                <asp:TemplateField>
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("DepartId") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <InsertItemTemplate>
                        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("DepartId") %>'></asp:TextBox>
                    </InsertItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# Bind("DepartId") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField>
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("DepartName") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <InsertItemTemplate>
                        <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("DepartName") %>'></asp:TextBox>
                    </InsertItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label2" runat="server" Text='<%# Bind("DepartName") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField>
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("ParentId") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <InsertItemTemplate>
                        <asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("ParentId") %>'></asp:TextBox>
                    </InsertItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label3" runat="server" Text='<%# Bind("ParentId") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="操作" ShowHeader="False">
                    <InsertItemTemplate>
                        <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True" CommandName="Insert" Text="插入"></asp:LinkButton>
                         <asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Cancel" Text="取消"></asp:LinkButton>
                    </InsertItemTemplate>
                    <ItemTemplate>
                        <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="New" Text="新建"></asp:LinkButton>
                        <asp:LinkButton ID="btnDelete" CausesValidation="false" CommandName="Delete"  CommandArgument='<%# Eval("DepartId") %>' Text="删除" runat="server" />
                        <asp:LinkButton ID="btnUpdate" CausesValidation="false" CommandName="Edit" CommandArgument='<%# Eval("DepartId") %>' Text="修改" runat="server" />
                    </ItemTemplate>
                    <EditItemTemplate>
                        <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True" CommandName="Update" CommandArgument='<%# Eval("DepartId") %>'  Text="修改"></asp:LinkButton>
                         <asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Cancel" Text="取消"></asp:LinkButton>
                    </EditItemTemplate>   
                </asp:TemplateField>
            </Fields>
        </asp:DetailsView>
    </div>

前提:先熟悉iptables的基本命令参数:

直接代码演示吧

先看一下运行后的页面

后台代码:

说明:经过测试,一些OUTPUT的规则使用下面命令是查看不到的,但是可以通过sudo
iptables-save命令进行查看,是因为一些nat表的没给出来,可以使用sudo
iptables -t tablename去查询,对于要知道哪些tablename时,可以使用man
iptables进行查询。

1.讲字符串转换为列表

1、列表展示

public partial class WebForm4 : System.Web.UI.Page
    {
        DepartmentInfoBLL bll = new DepartmentInfoBLL();
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Request.QueryString["departId"] == null) {
                Response.Redirect("WebForm3.aspx");
            }
            if (!IsPostBack) {
                InitDepart();
            }
        }

        private void InitDepart()
        {
            int departId = int.Parse(Request.QueryString["departId"]);
            IList<DepartmentInfo> list = bll.GetByDepartId(departId);
            this.gvDepart.DataSource = list;
            this.gvDepart.DataBind();
        }

        protected void gvDepart_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)
        {
            int departId = int.Parse(e.CommandArgument.ToString());
            string departName = (this.gvDepart.Rows[1].FindControl("TextBox2") as TextBox).Text;
            int parentId =int.Parse((this.gvDepart.Rows[2].FindControl("TextBox3") as TextBox).Text);
            //执行修改的方法
            bll.Update(new DepartmentInfo() { DepartId=departId,DepartName=departName,ParentId=parentId,Remark=""});
            //返回到只读模式
            this.gvDepart.ChangeMode(DetailsViewMode.ReadOnly);
            //重新绑定数据
            InitDepart();
        }

        protected void gvDepart_ItemInserting(object sender, DetailsViewInsertEventArgs e)
        {
            int departId = int.Parse((this.gvDepart.Rows[0].FindControl("TextBox1") as TextBox).Text);
            string departName = (this.gvDepart.Rows[1].FindControl("TextBox2") as TextBox).Text;
            int parentId = int.Parse((this.gvDepart.Rows[2].FindControl("TextBox3") as TextBox).Text);
            //执行添加的方法
            bll.Insert(new DepartmentInfo() { DepartId=departId,DepartName=departName,ParentId=parentId,Remark=""});
            //跳转到转到详情页面的前面一个页面
            Response.Redirect("~/WebForm3.aspx");
        }

        protected void gvDepart_ItemDeleting(object sender, DetailsViewDeleteEventArgs e)
        {
            int departId = int.Parse(e.Keys[0].ToString());
            //执行删除的方法
            bll.DeleteByDepartId(departId);
            //跳转到转到详情页面的前面一个页面
            Response.Redirect("~/WebForm3.aspx");
        }

        protected void gvDepart_ModeChanging(object sender, DetailsViewModeEventArgs e)
        {
            //改变模式
            this.gvDepart.ChangeMode(e.NewMode);
            InitDepart();
        }
    }

操作:

1 #列表的维护
2 #将字符串转换为列表
3 print(list("hello"))

图片 1

  

1、查看

输出结果

2、新增页面

sudo iptables -nvL –line-number

-L 查看当前表的所有规则,默认查看的是filter表,如果要查看NAT表,可以加上-t NAT参数
-n 不对ip地址进行反查,加上这个参数显示速度会快很多
-v 输出详细信息,包含通过该规则的数据包数量,总字节数及相应的网络接口
–line-number 显示规则的序列号,这个参数在删除或修改规则时会用到
['h', 'e', 'l', 'l', 'o']

图片 2

2、添加

2.修改元素

3、修改页面

添加规则有两个参数:-A和-I。其中-A是添加到规则的末尾;-I可以插入到指定位置,没有指定位置的话默认插入到规则的首部。

1 #修改元素
2 x = [1,2,3,4,5];
3 x[1]=0
4 print(x)

图片 3

当前规则:

输出结果

把jquery easyui下载好之后,一般引用下页几个文件

sudo iptables -nL --line-number

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    DROP       all  --  192.168.1.1          0.0.0.0/0
2    DROP       all  --  192.168.1.2          0.0.0.0/0
3    DROP       all  --  192.168.1.4          0.0.0.0/0
[1, 0, 3, 4, 5]

复制代码 代码如下:

添加一条规则到尾部:

3.增加元素

<link href=””
rel=”stylesheet” type=”text/css” />
    <link
href=””
rel=”stylesheet”
        type=”text/css” />
//页面图标样式
    <link
href=””
rel=”stylesheet” type=”text/css” />
    <script
src=””
type=”text/javascript”></script>
//jquery easyui主要的js
    <script
src=””
type=”text/javascript”></script>

sudo iptables -A INPUT -s 192.168.1.5 -j DROP
#增加元素 append()
names = ["a","b","c","d"]
#append()仅支持添加一个元素
names.append("e")
#extend()增加一个列表
names.extend(["e","f"])
#insert()根据索引添加元素
names.insert(1,"t")
print(names)

首先是列表展示数据

再插入一条规则到第三行,将行数直接写到规则链的后面:

输出结果

复制代码 代码如下:

sudo iptables -I INPUT 3 -s 192.168.1.3 -j DROP
['a', 't', 'b', 'c', 'd', 'e', 'e', 'f']

<table id=”dg” title=”My Users” class=”easyui-datagrid” style=”width:
700px; height: 250px”
        url=””
toolbar=”#toolbar” pagination=”true” rownumbers=”true”
        fitcolumns=”true” singleselect=”true”>
        <thead>
            <tr>
                <th field=”AccountCode” width=”50″>
                    编号
                </th>
                <th field=”AccountName” width=”50″>
                    卡名
                </th>
                <th field=”AccountPwd” width=”50″>
                    密码
                </th>
                <th field=”CreateTime” width=”50″>
                    创建时间
                </th>
                <th field=”CreateName” width=”50″>
                    创建人
                </th>
            </tr>
        </thead>
    </table>

查看:

4.删除

jquery
easyui是用datagrid对数据进行展示的,所以class要选择easyui-datagrid;url是本列表的一个json格式的数据来源toobar后面跟着的”#toobar”是列表的一个工具栏,本示例在列表上显示的是添加,修改,删除功能按钮对数据进行操作。pagination是否显示分页,rownumbers显示行数,分页时向后台传去两个参数,一个就是当前页数另一个就是每页显示行数;fitcolumns:自适应列宽;singleselected:单选。
工具条代码

sudo iptables -nL --line-number

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    DROP       all  --  192.168.1.1          0.0.0.0/0
2    DROP       all  --  192.168.1.2          0.0.0.0/0
3    DROP       all  --  192.168.1.3          0.0.0.0/0
4    DROP       all  --  192.168.1.4          0.0.0.0/0
5    DROP       all  --  192.168.1.5          0.0.0.0/0
 1 #删除remove()删除指定值的元素
 2 x = [1,2,3,4,5]
 3 x.remove(2)
 4 print("--------删除2----------")
 5 print(x)
 6 names=["Alice","Linda","Bob"]
 7 names.remove("Bob")
 8 print("--------删除BOb----------")
 9 print(names)
10 
11 #del 根据索引删除元素
12 numbers = [6,7,8,9,10,11]
13 del numbers[1]
14 print("--------删除索引1----------")
15 print(numbers)
16 
17 # pop()根据索引删除元素
18 numbers1 = [6,7,8,9,10,11]
19 numbers1.pop(1)
20 print("--------删除索引1----------")
21 print(numbers1)
22 numbers1.pop()
23 print("--------删除最后一个元素----")
24 print(numbers1)

复制代码 代码如下:

可以看到192.168.1.3插入到第三行,而原来的第三行192.168.1.4变成了第四行。

输出结果

<div id=”toolbar”>
        <a href=”javascript:void(0)” class=”easyui-linkbutton”
iconcls=”icon-add” onclick=”newuser()”
            plain=”true”>添加</a> <a
href=”javascript:void(0)” class=”easyui-linkbutton”
iconcls=”icon-edit”
                onclick=”edituser()” plain=”true”>修改</a>
<a href=”javascript:void(0)” class=”easyui-linkbutton”
                    iconcls=”icon-remove”
plain=”true”>删除</a>
    </div>

3、删除

--------删除2----------
[1, 3, 4, 5]
--------删除BOb----------
['Alice', 'Linda']
--------删除索引1----------
[6, 8, 9, 10, 11]
--------删除索引1----------
[6, 8, 9, 10, 11]
--------删除最后一个元素----
[6, 8, 9, 10]

数据源格式

删除用-D参数

5.分片赋值

图片 4

删除之前添加的规则(sudo iptables -A INPUT -s 192.168.1.5 -j
DROP):

 1 #分片赋值
 2 str1 = ["a","b","c"]
 3 # 替换索引>=2
 4 str1[2:] = list("de")
 5 print("替换索引>=2结果 :",str1)
 6 #删除索引2
 7 str1[2:2] = "f"
 8 print("删除索引2结果 :",str1)
 9 #赋值且替换索引2-3
10 str1[2:4] = ["g","h","i"]
11 print("赋值且替换索引2-3结果 :",str1)
12 #删除元素
13 str1[:] = []
14 print("删除所有结果 :",str1)

数据源添加弹出框

iptables -D INPUT -s 192.168.1.5 -j DROP

输出结果

复制代码 代码如下:

有时候要删除的规则太长,删除时要写一大串,既浪费时间又容易写错,这时我们可以先使用–line-number找出该条规则的行号,再通过行号删除规则。

替换索引>=2结果 : ['a', 'b', 'd', 'e']
删除索引2结果 : ['a', 'b', 'f', 'd', 'e']
赋值且替换索引2-3结果 : ['a', 'b', 'g', 'h', 'i', 'e']
删除所有结果 : []

<div id=”dlg” class=”easyui-dialog” style=”width: 400px; height:
280px; padding: 10px 20px;”
       closed=”true” buttons=”#dlg-buttons”>
       <div class=”ftitle”>
           信息编辑
       </div>
       <form id=”fm” method=”post”>
       <div class=”fitem”>
           <label>
               编号
           </label>
           <input name=”AccountCode” class=”easyui-validatebox”
required=”true” />
       </div>
       <div class=”fitem”>
           <label>
               卡号</label>
           <input name=”AccountName” class=”easyui-validatebox”
required=”true” />
       </div>
       <div class=”fitem”>
           <label>
               密码</label>
           <input name=”AccountPwd” class=”easyui-validatebox”
required=”true” />
       </div>
       <div class=”fitem”>
           <label>
               创建时间</label>
           <input name=”CreateTime” class=”easyui-datebox”
required=”true” />
       </div>
       <div class=”fitem”>
           <label>
               创建人</label>
           <input name=”CreateName” class=”easyui-vlidatebox” />
       </div>
       <input type=”hidden” name=”action” id=”hidtype” />
       <input type=”hidden” name=”ID” id=”Nameid” />
       </form>
   </div>

sudo iptables -nL --line-number

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    DROP       all  --  192.168.1.1          0.0.0.0/0
2    DROP       all  --  192.168.1.2          0.0.0.0/0
3    DROP       all  --  192.168.1.3          0.0.0.0/0

6.搜索元素

?<div id=”dlg-buttons”>
        <a href=”javascript:void(0)” class=”easyui-linkbutton”
onclick=”saveuser()” iconcls=”icon-save”>保存</a>
        <a href=”javascript:void(0)” class=”easyui-linkbutton”
onclick=”javascript:$(‘#dlg’).dialog(‘close’)”
            iconcls=”icon-cancel”>取消</a>
    </div>

删除第二行规则

1 #搜索元素
2 names1=["Alice","Linda","Bob"]
3 if "Alice" in names1:
4     print(True)
5 else:
6     print(False)

注:class为弹出框类型;closed:当前显示状态为隐藏;buttons:弹出框的功能按钮;

sudo iptables -D INPUT 2

输出结果

对弹出的添加页面添加样式

删除所有规则(慎用)

True

复制代码 代码如下:

sudo iptables -F 
sudo iptables -X
sudo iptables -Z
#针对某张表(nat)进行删除
sudo iptables -F -t nat
sudo iptables -X -t nat
sudo iptables -Z -t nat

7.搜索元素索引值

?<style type=”text/css”>
        #fm
        {
            margin: 0;
            padding: 10px 30px;
        }
        .ftitle
        {
            font-size: 14px;
            font-weight: bold;
            padding: 5px 0;
            margin-bottom: 10px;
            border-bottom: 1px solid #ccc;
        }
        .fitem
        {
            margin-bottom: 5px;
        }
        .fitem label
        {
            display: inline-block;
            width: 80px;
        }
    </style>

说明:要知道是哪张表时,可以使用sudo iptables-save输出全部规则,#
Generated by下一行开头带星号的就是表面。

1 #index()元素索引值
2 str1 = ["a","b","c"]
3 print(str1.index("a"))

 js实现对数据的添加修改删除

技巧:比如一些nat转发的规则不会展示,则查询时可以使用sudo iptables -nL
–line-number -t nat查询,然后通过sudo iptables -D INPUT 2 -t
nat进行删除。

输出结果

复制代码 代码如下:

4、修改

0

    <script type=”text/javascript”>
        var url;
        var type;
        function newuser() {
            $(“#dlg”).dialog(“open”).dialog(‘setTitle’, ‘New User’);
;
            $(“#fm”).form(“clear”);
            url = “UserManage.aspx”;
            document.getElementById(“hidtype”).value=”submit”;
        }
        function edituser() {
            var row = $(“#dg”).datagrid(“getSelected”);
            if (row) {
                $(“#dlg”).dialog(“open”).dialog(‘setTitle’, ‘Edit
User’);
                $(“#fm”).form(“load”, row);
                url = “UserManage.aspx?id=” + row.ID;
            }
        }
        function saveuser() {
            $(“#fm”).form(“submit”, {
                url: url,
                onsubmit: function () {
                    return $(this).form(“validate”);
                },
                success: function (result) {
                    if (result == “1”) {
                        $.messager.alert(“提示信息”, “操作成功”);
                        $(“#dlg”).dialog(“close”);
                        $(“#dg”).datagrid(“load”);
                    }
                    else {
                        $.messager.alert(“提示信息”, “操作失败”);
                    }
                }
            });
        }
        function destroyUser() {
            var row = $(‘#dg’).datagrid(‘getSelected’);
            if (row) {
                $.messager.confirm(‘Confirm’, ‘Are you sure you want to
destroy this user?’, function (r) {
                    if (r) {
                        $.post(‘destroy_user.php’, { id: row.id },
function (result) {
                            if (result.success) {
                                $(‘#dg’).datagrid(‘reload’);    //
reload the user data 
                            } else {
                                $.messager.show({   // show error
message 
                                    title: ‘Error’,
                                    msg: result.errorMsg
                                });
                            }
                        }, ‘json’);
                    }
                });
            }
        } 
    </script>

修改使用-R参数

8.统计元素出现次数

EasyUI看了一些博主用其开发出来的项目,页面很炫,感觉功能挺强大,效果也挺不错,最近一直想系统学习一套前台控件,于是在…

先看下当前规则:

1 #count()统计某元素出现次数
2 number1 = [1,2,1,3,4]
3 print(number1.count(1))
sudo iptables -nL --line-number

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    DROP       all  --  192.168.1.1          0.0.0.0/0
2    DROP       all  --  192.168.1.2          0.0.0.0/0
3    DROP       all  --  192.168.1.5          0.0.0.0/0

输出结果

将第三条规则改为ACCEPT:

2
sudo iptables -R INPUT 3 -j ACCEPT

9.反向存放

再查看下:

1 #reverse将列表中的元素反向存放,返回值为null
2 number1 = [1,2,1,3,4]
3 number1.reverse();
4 print(number1)
sudo iptables -nL --line-number

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    DROP       all  --  192.168.1.1          0.0.0.0/0
2    DROP       all  --  192.168.1.2          0.0.0.0/0
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0

输出结果

第三条规则的target已改为ACCEPT。

[4, 3, 1, 2, 1]

 

 10.排序

参考:

1 #sort()方法:对元素进行排序,返回值为null
2 number1 = [1,2,1,3,4]
3 number1.sort()
4 print(number1)
5 #sorted()返回值为排序后的数组
6 number2 = [1,2,1,3,4]
7 y=sorted(number2);
8 print(y)
9 print(number2)

(以上内容转自此篇文章)

 输出结果

[1, 1, 2, 3, 4]
[1, 1, 2, 3, 4]
[1, 2, 1, 3, 4]

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图