Для извлечения, например, значения узла value
sub -каждого узла instruction
, который также имеет узел name
sub -, значение которого равно Exterior Color
, с использованием XMLStarlet:
xmlstarlet sel -v '//instruction[name = "Exterior Color"]/value' -nl file.xml
Учитывая файл
Interior Finish
WHITE
0
Exterior Color
WHITE
0
Base Vinyl Color
WHITE
0
False
Это вернет строку WHITE
.
Следующее будет возвращать каждый name
, который соответствует значению WHITE
во всех instruction
узлах:
xmlstarlet sel -t -v '//instruction[value = "WHITE"]/name' -nl file.xml
Правильным синтаксисом было бы использование 0.0.0.0/0, так как 0.0.0.0 по умолчанию равно 0.0.0.0/32. Увы, как вы обнаружили, это не поддерживается:
# ipset add testset 0.0.0.0/0,22
ipset v7.3: The value of the CIDR parameter of the IP address is invalid
Вместо этого вы можете использовать тот же трюк, что и в OpenVPN при переопределении маршрутов :разделить 0.0.0.0/0 пополам :0.0.0.0/1 и 128.0.0.0/1:
ipset add testset 0.0.0.0/1,22
ipset add testset 128.0.0.0/1,22
Примечание:
Обычно для сервера, на котором работает локальный ssh-сервер, параметры iptables , вероятно, должны быть такими:
iptables -I INPUT 1 -m set --match-set testset src,dst -j ACCEPT
Поскольку мы находимся в цепочке INPUT , то есть получение , src,dst
означает проверку удаленного (источника )IP и локального (пункта назначения )порт, а src,src
будет означать проверку удаленного (исходного )IP-адреса и удаленного (исходного )порта. Единственным использованием для этого было бы разрешить ответный трафик от удаленных серверов ssh, но это обычно уже обрабатывается с помощью -m conntrack --ctstate ESTABLISHED
в другом месте.