<?xml version="1.0"?>
<!DOCTYPE tag1 [
<!ELEMENT tag1 (tag21, tag22)>
<!ELEMENT tag21 (CDATA)>
<!ELEMENT tag22 (#PCDATA)>
]>
<tag1>
<tag21>
<p>text
<p>text2</p>
<p>text3
</tag21>
<tag22>
<br/>
</tag22>
</tag1>
>>> from lxml import etree
>>> parser = etree.XMLParser(recover=True, huge_tree=True, load_dtd=True)
>>> tree = etree.parse("test.xml", parser)
>>> print etree.tostring(tree, pretty_print=True)
<!DOCTYPE tag1 [
<!ELEMENT tag1 (tag21 , tag22)>
<!ELEMENT tag21 (CDATA)>
<!ELEMENT tag22 (#PCDATA)>
]>
<tag1>
<tag21>
<p>text
<p>text2</p>
<p>text3
</p>
<tag22>
<br/>
</tag22>
</p>
</tag21></tag1>
>>> from StringIO import StringIO
>>> from lxml import etree
>>> xml = "<tag1><tag21><p></tag21><tag22></tag22></tag1>"
>>> parser = etree.XMLParser(recover=True, huge_tree=True)
>>> tree = etree.parse(StringIO(xml), parser)
>>> print etree.tostring(tree, pretty_print=True)
<tag1>
<tag21>
<p/>
<tag22/>
</tag21>
</tag1>
>>> xml = "<tag1><tag21><p>text<p>text2</p><p>text3</tag21><tag22></tag22></tag1>"
>>> tree = etree.parse(StringIO(xml), parser)
>>> print etree.tostring(tree, pretty_print=True)
<tag1>
<tag21>
<p>text<p>text2</p><p>text3</p><tag22/></p>
</tag21>
</tag1>
Следующее возможно с помощью UPnP:
- портмап внутренних сервисов на внешнем интерфейсе (проброс портов)
- портмап веб-интерфейса роутера на внешнем интерфейсе (позволяет брутфорсить вебку роутера из инета)
- портмап на любой внешний адрес (помогает злоумышленнику скрыть свой IP при аттаках на внешний адрес. Он посылает пакеты на ваш роутер и промапленный порт, а ваш роутер от своего IP уже пересылает пакеты на хост жертвы)
- подмена DNS серверов (актуально если роутер одновременно DHCP-сервер, позволяет перенаправить запросы какого-нить bank.com на сервер злоумышленника).
- изменить административные пароли на роутер
- изменить настройки подключения PPP
- изменить настройки IP на всех интерфейсах
- изменить настройки WiFi
- разорвать соединение