Не могли бы вы указать ошибку? что вы получаете после выполнения, потому что скрипт у меня работает. Здесь есть тот же вопрос, на который ответят с использованием php
и perl
:
Выходной URL-адрес открытых вкладок firefox в терминале
Поскольку основная часть в python, здесь чисто python, чтобы сделать то же самое, попробуйте его:
#!/usr/bin/python
import json
f = open("recovery.js","r")
jdata = json.loads(f.read())
f.close()
number_of_selected_tab = jdata["windows"][0]["selected"]
tab_number = 1
for win in jdata.get("windows"):
for tab in win.get("tabs"):
if number_of_selected_tab == tab_number :
tab_index = tab.get("index") - 1
print tab.get("entries")[tab_index].get("url")
tab_number = tab_number + 1
Я заменил файл /home/username/.mozilla/firefox/xxxxx.default/sessionstore.js
на recovery.js
. В моем случае (Mozilla Firefox 44.0, openSUSE 13.1) это файл ~ / .mozilla / firefox / *. Default / sessionstore-backups / recovery.js
. И последнее, но не менее важное: сценарий не работает, если у вас запущено два экземпляра Firefox
.
это:
# ip link add link eth0 name untagged type vlan id 0
, похоже, помогает.
tcpdump на родительском интерфейсе (eth0) показывает непомеченные пакеты, когда вы пингует -I untagged (some-ip).
(tcpdump на новом логическом интерфейсе должен отображать только нетегированный трафик, тогда как tcpdump на родительском интерфейсе должен отображать весь трафик, помеченный и немаркированный, с заголовками 802.1q для помеченного материала.)
вам может потребоваться отключить ARP на родительском интерфейсе, чтобы немаркированные ответы ARP не помещались в таблицу ARP относительно родительского интерфейса:
# ip link set eth0 arp off
# ip link set untagged arp on
я бы также отключил локальные адреса связи IPv6 на родительском интерфейсе и включил бы на немаркированном логическом интерфейсе навсегда мера.
вы можете повышать / понижать нетегированный интерфейс, не уничтожая весь родительский интерфейс (включая тегированный трафик) и т. Д.
Я обнаружил, что работает следующий метод.
Вот пример:
$ tc qdisc del dev eth0 root
$ tc qdisc add dev eth0 handle 1: root prio
$ tc filter add dev eth0 parent 1: protocol 802.1q basic match 'meta(vlan eq 0)' action vlan pop
$ tc qdisc del dev eth0 ingress
$ tc qdisc add dev eth0 handle ffff: ingress
$ tc filter add dev eth0 parent ffff: protocol all basic match 'not meta(protocol eq 0x8100)' action vlan push id 0
$ ip link add eth0-vlan0 type vlan id 0
$ ip link set eth0-vlan0 up
$ ip addr add 192.168.10.253/24 dev eth0-vlan0
peer$ ping 192.168.10.253
PING 192.168.10.253 (192.168.10.253) 56(84) bytes of data.
64 bytes from 192.168.10.253: icmp_seq=1 ttl=64 time=0.209 ms
64 bytes from 192.168.10.253: icmp_seq=2 ttl=64 time=0.188 ms
^C
Обратите внимание, что добавление prio qdisc на выходе (известное как «root» выше) отключает стандартную дисциплину mq, которая разделяет пакеты в соответствии с количеством очередей передачи на сетевом адаптере. чтобы позволить нескольким потокам ЦП проталкивать пакеты в разные очереди TX. Чтобы восстановить поведение по умолчанию, используйте mqprio следующим образом:
$ tx_q_count=$(ls -d /sys/class/net/eth0/queues/tx-* | wc -l)
$ tc qdisc del dev eth0 root
$ tc qdisc add dev eth0 handle 1: root prio bands $tx_q_count multiqueue
$ tc filter add dev eth0 parent 1: protocol 802.1q basic match 'meta(vlan eq 0)' action vlan pop
$ for i in $(seq 1 $tx_q_count); do tc qdisc add dev eth0 parent 1:$i pfifo_fast; done
$ tc qdisc del dev eth0 ingress
$ tc qdisc add dev eth0 handle ffff: ingress
$ tc filter add dev eth0 parent ffff: protocol all basic match 'not meta(protocol eq 0x8100)' action vlan push id 0
$ ip link add eth0-vlan0 type vlan id 0
$ ip link set eth0-vlan0 up
$ ip addr add 192.168.10.253/24 dev eth0-vlan0
peer$ ping 192.168.10.253
PING 192.168.10.253 (192.168.10.253) 56(84) bytes of data.
64 bytes from 192.168.10.253: icmp_seq=1 ttl=64 time=0.230 ms
64 bytes from 192.168.10.253: icmp_seq=2 ttl=64 time=0.198 ms
^C
Другое решение, которое также работает, - это добавить программный мост рядом с логическими интерфейсами vlan на физическом интерфейсе. Программный мост имеет функцию фильтрации vlan, которая позволяет использовать ограниченное переназначение vlan (pvid-> vid на входящем и vid-> pvid на выходе, но не полное переназначение). Вот пример:
$ ip link add eth0-vlan0 type bridge
$ echo 0 > /sys/class/net/eth0-vlan0/bridge/default_pvid
$ echo 1 > /sys/class/net/eth0-vlan0/bridge/vlan_filtering
$ ip link set dev eth0 master eth0-vlan0
$ bridge vlan add vid 4094 dev eth0 pvid untagged
$ bridge vlan add vid 4094 dev eth0-vlan0 untagged pvid self
$ ip link add eth0-vlan4094 link eth0 type vlan id 4094
# ... BEGIN: only if you intend to use vlan 4094 ...
$ ip link set eth0-vlan4094 up
$ ip addr add 10.10.40.253/24 dev eth0-vlan4094
# ... END ...
$ ip link set eth0-vlan0 up
$ ip addr add 192.168.10.253/24 dev eth0-vlan0
peer$ ping 192.168.10.253
PING 192.168.10.253 (192.168.10.253) 56(84) bytes of data.
64 bytes from 192.168.10.253: icmp_seq=1 ttl=64 time=0.238 ms
64 bytes from 192.168.10.253: icmp_seq=2 ttl=64 time=0.215 ms
^C
Вам нужен интерфейс VLAN, соответствующий номеру VID, используемому внутри моста, потому что функция фильтрации VLAN немного так себе. Он принимает оба немаркированных кадра с использованием сопоставления pvid-> vid, но также принимает кадры с тегом VLAN на проводе, совпадающим с переназначенным vid. Вместо этого интерфейс VLAN съедает эти кадры. Оставьте его в выключенном состоянии, если вам не нужна эта конкретная VLAN.
Программный мост недавно получил функцию "default_pvid", которая заставляет его работать как дешевые аппаратные коммутаторы: он поддерживает vlan, но по умолчанию выполняет сопоставление pvid-> vid с vid 1 и разрешает vid 1 на всех портах. , чтобы вы могли подключить коммутатор и начать использовать порты для немаркированного трафика без единой директивы конфигурации.
Наконец, более современным решением было бы использовать tc_clsact и написать небольшую программу BPF для вставки / вставки тегов для PVID. Работает так же, как приведенный выше пример TC, за исключением того, что некоторые сетевые адаптеры позволяют аппаратно разгрузить программы BPF, поэтому он может быть более производительным.
Вот решение с использованием eBPF.
Чтобы избежать установки bcc и компиляции кода из исходного кода, вот двоичный файл:
$ base64 -d > tag-native-vlan0.o
f0VMRgIBAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAALABAAAAAAAAAAAAAEAAAAAA
AEAABwABAGESFAAAAAAAVQIDAAAAAAC3AgAAAIEAALcDAAAAAAAAhQAAABIAAAC3AAAAAAAAAJUA
AAAAAAAAYRIUAAAAAAAVAgMAAAAAAGESGAAAAAAAVQIBAAAAAACFAAAAEwAAALcAAAAAAAAAlQAA
AAAAAABHUEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF4AAAAAAAMAKAAAAAAAAAAAAAAA
AAAAAFcAAAAAAAQAKAAAAAAAAAAAAAAAAAAAAD0AAAAQAAUAAAAAAAAAAAAAAAAAAAAAACMAAAAQ
AAQAAAAAAAAAAAAAAAAAAAAAAAcAAAAQAAMAAAAAAAAAAAAAAAAAAAAAAAAudGV4dABjbHNhY3Rf
aW5ncmVzcwBwdmlkX2luZ3Jlc3MAY2xzYWN0X2VncmVzcwBwdmlkX2VncmVzcwBfX2xpY2Vuc2UA
LnN0cnRhYgAuc3ltdGFiAExCQjFfMwBMQkIwXzIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEcAAAADAAAAAAAAAAAAAAAA
AAAAAAAAAEgBAAAAAAAAZQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAYA
AAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAFgAA
AAEAAAAGAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAA
AAAAADEAAAABAAAABgAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAgAAAAA
AAAAAAAAAAAAAAA/AAAAAQAAAAMAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAQAAAAAAAAAAAAAAAAA
AAABAAAAAAAAAAAAAAAAAAAATwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAuAAAAAAAAACQAAAAAAAA
AAEAAAADAAAACAAAAAAAAAAYAAAAAAAAAA==
^D
Я без особой причины установил PVID для сопоставления с VID 0 вместо VID 10.
(Чтобы изменить его на VID 10, используйте дизассемблер и ассемблер, например ubpf или llvm-objdump, в файле .o и измените тег VLAN. Вы также можете общаться с eBPF из пользовательского пространства, поэтому он должен
Убедитесь, что вы запустили что-то вроде ядра 4.8.0 ( uname -a
) и iproute2 4.9.0 ( ip -V
).
Добавьте eBPF к физическому интерфейсу:
$ tc qdisc add dev eth0 clsact
$ tc filter add dev eth0 ingress bpf object-file tag-native-vlan0.o section pvid_ingress
$ tc filter add dev eth0 egress bpf object-file tag-native-vlan0.o section pvid_egress
Создайте логический интерфейс:
$ ip link add eth0-vlan0 link eth0 type vlan id 0
$ ip link set eth0-vlan0 up
$ ip addr add 192.168.10.253/24 dev eth0-vlan0
L3 настроен на логическом интерфейсе, а физический интерфейс используется для L2.
Тест из подключенного бокса:
peer$ ping 192.168.10.253
PING 192.168.10.253 (192.168.10.253) 56(84) bytes of data.
64 bytes from 192.168.10.253: icmp_seq=1 ttl=64 time=0.380 ms
64 bytes from 192.168.10.253: icmp_seq=2 ttl=64 time=0.240 ms
^C
И вот он, «немаркированный интерфейс в Linux».