- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试将数据从 xml 加载到 iptables。我正在使用以下命令:
xsltproc /usr/share/iptables/iptables.xslt myiptable.xml | iptables-restore
但是我得到这个错误
iptables-restore v1.4.12: Couldn't load match `ptcp':No such file or directory
我比较了 ip-tables-save
和 xsltproc/usr/share/iptables/iptables.xslt myiptable.xml
的输出,我得到了这个
xsltproc/usr/share/iptables/iptables.xslt myiptable.xml
的输出:
-A INPUT -m ptcp -m tcp --dport 22 -j ACCEPT
ip-tables-save
的输出:
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
有人可以解释一下发生了什么吗?另外,有没有我可以下载的标准 iptables.xslt
文件?
最佳答案
那么,您的 XSLT 输出在语法上似乎不正确。
所以 -m ptcp -m tcp
应该是 -p tcp -m tcp
. IIRC -m
匹配并且-p
是协议(protocol)。
我对此进行了进一步调查
这似乎是/usr/share/iptables/iptables.xslt
中的错误.实际的 XSLT 与 XML 格式不同步,因此输出不可用。
原文iptables.xslt
(2011-07-22) 使用
<xsl:if test="name() != 'match'">
但是没有<match>
生成的 XML 文件中的元素,因此计算结果始终为真 - 创建 -m ptcp
输出(在许多其他错误字符串旁边)。
解决方案:
我重写了 iptables.xslt
替换与 conditions
匹配的第一个模板与
<!-- output conditions of a rule but not an action -->
<xsl:template match="iptables-rules/table/chain/rule/conditions/*">
<!-- <match> is the psuedo module when a match module doesn't need to be loaded and when -m does not need to be inserted -->
<xsl:choose>
<xsl:when test="document('ipt-ext.xml')//@name = name()">
<xsl:text> -m </xsl:text><xsl:value-of select="name()"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat(' -',name(),' ')"/>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates select="node()"/>
</xsl:template>
此模板需要在同一目录中的辅助 XML 帮助文件,以识别匹配扩展,这些文件列在我命名为 ipt-ext.xml
的文件中.在 /usr/share/iptables/
中使用此名称和以下内容创建一个新文件
<?xml version="1.0" encoding="ISO-8859-1"?>
<IPTablesMatchExtensions>
<IPText name="addrtype" />
<IPText name="ah" />
<IPText name="ah" />
<IPText name="bpf" />
<IPText name="cluster" />
<IPText name="comment" />
<IPText name="connbytes" />
<IPText name="connlimit" />
<IPText name="connmark" />
<IPText name="conntrack" />
<IPText name="cpu" />
<IPText name="dccp" />
<IPText name="devgroup" />
<IPText name="dscp" />
<IPText name="dst" />
<IPText name="ecn" />
<IPText name="esp" />
<IPText name="eui64" />
<IPText name="frag" />
<IPText name="hashlimit" />
<IPText name="hbh" />
<IPText name="helper" />
<IPText name="hl" />
<IPText name="icmp" />
<IPText name="icmp6" />
<IPText name="iprange" />
<IPText name="ipv6header" />
<IPText name="ipvs" />
<IPText name="length" />
<IPText name="limit" />
<IPText name="mac" />
<IPText name="mark" />
<IPText name="mh" />
<IPText name="multiport" />
<IPText name="nfacct" />
<IPText name="osf" />
<IPText name="owner" />
<IPText name="physdev" />
<IPText name="pkttype" />
<IPText name="policy" />
<IPText name="quota" />
<IPText name="rateest" />
<IPText name="realm" />
<IPText name="recent" />
<IPText name="rpfilter" />
<IPText name="rt" />
<IPText name="sctp" />
<IPText name="set" />
<IPText name="socket" />
<IPText name="state" />
<IPText name="statistic" />
<IPText name="string" />
<IPText name="tcp" />
<IPText name="tcpmss" />
<IPText name="time" />
<IPText name="tos" />
<IPText name="ttl" />
<IPText name="u32" />
<IPText name="udp" />
<IPText name="unclean" />
</IPTablesMatchExtensions>
应用:
从 IPTables 规则到 XML 文件:
sudo iptables-save | iptables-xml -c > myiptable.xml
从 XML 文件回到 IPTables 规则:
xsltproc /usr/share/iptables/iptables.xslt myiptable.xml | sudo iptables-restore
测试用例:我用这些 iptables
测试了新样式表规则:
$ sudo iptables-save
# Generated by iptables-save v1.4.12 on Thu May 19 12:00:00 2016
*nat
:PREROUTING ACCEPT [11:568]
:INPUT ACCEPT [1:248]
:OUTPUT ACCEPT [35:2284]
:POSTROUTING ACCEPT [35:2284]
-A PREROUTING -s 192.168.69.9/32 -i eth1 -p tcp -m tcp --dport 80 --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT
-A PREROUTING -d 192.168.70.124/32 -i eth1 -p tcp -m tcp --dport 80 --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT
COMMIT
# Completed on Thu May 19 12:00:00 2016
# Generated by iptables-save v1.4.12 on Thu May 19 12:00:00 2016
*filter
:INPUT ACCEPT [138:40810]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [135:24836]
-A INPUT -p tcp -m tcp --dport 65002 -j ACCEPT
-A INPUT -s 10.0.0.0/32 -p tcp -m tcp --dport 65003 -j ACCEPT
-A INPUT -d 10.0.0.1/32 -m connbytes --connbytes 1:4 --connbytes-mode bytes --connbytes-dir both -j ACCEPT
COMMIT
# Completed on Thu May 19 12:00:00 2016
然后我使用上面的命令将此输出转换为 XML
sudo iptables-save | iptables-xml -c > myiptable.xml
生成的 XML 文件如下所示:
<iptables-rules version="1.0">
<!-- # Generated by iptables*-save v1.4.12 on Thu May 19 12:00:00 2016 -->
<table name="nat" >
<chain name="PREROUTING" policy="ACCEPT" packet-count="3" byte-count="96" >
<rule >
<conditions>
PREROUTING <s >192.168.69.9/32</s>
<i >eth1</i>
<p >tcp</p>
<tcp >
<dport >80</dport>
<tcp-flags >FIN,SYN,RST,ACK SYN</tcp-flags>
</tcp>
</conditions>
<actions>
<ACCEPT />
</actions>
</rule>
<rule >
<conditions>
PREROUTING <d >192.168.70.124/32</d>
<i >eth1</i>
<p >tcp</p>
<tcp >
<dport >80</dport>
<tcp-flags >FIN,SYN,RST,ACK SYN</tcp-flags>
</tcp>
</conditions>
<actions>
<ACCEPT />
</actions>
</rule>
</chain>
<chain name="INPUT" policy="ACCEPT" packet-count="0" byte-count="0" />
<chain name="OUTPUT" policy="ACCEPT" packet-count="8" byte-count="541" />
<chain name="POSTROUTING" policy="ACCEPT" packet-count="8" byte-count="541" />
</table>
<!-- # Completed on Thu May 19 12:00:00 2016 -->
<!-- # Generated by iptables*-save v1.4.12 on Thu May 19 12:00:00 2016 -->
<table name="filter" >
<chain name="INPUT" policy="ACCEPT" packet-count="127" byte-count="27749" >
<rule >
<conditions>
INPUT <p >tcp</p>
<tcp >
<dport >65002</dport>
</tcp>
</conditions>
<actions>
<ACCEPT />
</actions>
</rule>
<rule >
<conditions>
INPUT <s >10.0.0.0/32</s>
<p >tcp</p>
<tcp >
<dport >65003</dport>
</tcp>
</conditions>
<actions>
<ACCEPT />
</actions>
</rule>
<rule >
<conditions>
INPUT <d >10.0.0.1/32</d>
<connbytes >
<connbytes >1:4</connbytes>
<connbytes-mode >bytes</connbytes-mode>
<connbytes-dir >both</connbytes-dir>
</connbytes>
</conditions>
<actions>
<ACCEPT />
</actions>
</rule>
</chain>
<chain name="FORWARD" policy="ACCEPT" packet-count="0" byte-count="0" />
<chain name="OUTPUT" policy="ACCEPT" packet-count="78" byte-count="6909" />
</table>
<!-- # Completed on Thu May 19 12:00:00 2016 -->
</iptables-rules>
然后再次从 XML 返回到 iptables
xsltproc /usr/share/iptables/iptables.xslt myiptable.xml | sudo iptables-restore
一切都按预期无缝运行。
关于c - iptables-restore v1.4.12 : iptables. xslt 创建错误输出:无法加载匹配 `ptcp',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37219628/
我有一个 k*n矩阵 X 和 k*k矩阵A。对于X的每一列,我想计算标量 X[:, i].T.dot(A).dot(X[:, i]) (或者,数学上, Xi' * A * Xi )。 目前,我有一个
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我是 VueJS 的新手。我已经使用 vuetify/webpack-ssr 模板创建了一个项目,现在我想创建一个登录页面,但是没有显示表单,控制台给了我以下信息: [Vue warn]: Unkno
我尝试将 value 插入到 C++ vector v 之前的第 i 元素(或元素 (i-1) 之后) )。代码很简单 v.insert(v.begin() + i, value); 我确信当 i 介
我需要显示使用合并排序算法排序的 vector 。然而,当我使用 v.begin() 时,我的 friend 使用 v.data() 来传递 vector 。他的代码运行良好,而我的却不行。请解释。
这是我的命令(url1、url2、url3、url4 是占位符): ffmpeg -i url1 -i url2 -i url3 -i url4 -filter_complex “[1:v:0] [1
我以前用过Vue,我知道怎么用v-for渲染元素序列,v-if或v-show有条件地显示元素,并且 v-model例如,控制段落的内容。 但现在我需要对 DOM 进行更精细的控制: 我有一个range
我正在学习所有权和借用。 borrow1 和borrow2 的区别在于在borrow2 打印时使用了&: fn borrow1(v: &Vec) { println!("{}", &v[10]
我找不到一种方法来选择不同的选项来渲染 v-for 中的文本。是否有可能或者我是否需要以不同的方式构建逻辑来执行类似于下面的代码的操作? // i
Iterable 的三个直接子类型是 Map , Seq , 和 Set .除了性能问题之外,似乎还有一个 Seq是从整数到值的映射,以及 Set是从值到 bool 值的映射(如果值在集合中,则为 t
我想应用一个计算方法,如果键存在则增加值,否则将 1。有 Map map = new HashMap<>(); 我不明白为什么 for (int i = 0; i v != null ? v++ :
标准(IEEE 754/C)是否保证以下代码断言永远不会失败? int main() { for ( /* all possible float / double values */ )
代码由Vue语言编写,使用Element-ui框架, 如果一个对象包含某些内容,则会显示该内容,如果不包含则禁用菜单按钮。 输出应该是这样的: a、b(禁用)、c、d、e 但我的是这样的: a、a(禁
如果我这样做: {{ morevalue }} {{ value }} v-else 中的跨度也会在第二个 V-FOR 上循环,即使它上面没有任何 v-for,为什么? 这是
如果我这样做: {{ morevalue }} {{ value }} v-else 中的跨度也会在第二个 V-FOR 上循环,即使它上面没有任何 v-for,为什么? 这是
我将 Vue.js 与 Vuetify 一起使用,我正在尝试使用 v-data-table 从后端加载菜单列表并使用 对其设置一些权限v-switches 但我在尝试 v-model 数组时遇到问题:
我在 Java 的流式操作中努力维护我想要的数据结构,这很可能是由于缺乏正确的理解和实践。 public class Main { public static void main(String
我正在尝试为匹配中的每个匹配呈现一些 HTML,但是,我不太确定 实际上是正确的。 更具体地说,我不确定我是否可以使用 v-bind:match='match'在与循环相同的元素上 v-for='ma
所以我想知道为什么这个 v-if 和 v-else 语句不起作用,为什么我要以不同的方式解决它。 代码如下 Required: Select a Workflow {{ isChain ?
我有一个 VueJS 组件 ,我在同一个模板中使用了两次来显示两组不同的数据。每个都显示在自己的 使用 v-if 切换的容器在导航选项卡上。 似乎这些组件被实例化为同一个实例。我调用 console
我是一名优秀的程序员,十分优秀!