Пакет может быть сниффинговым абсолютно где угодно на маршруте между клиентом и сервером. Взломщик просто должен получить физический доступ к одной из тех сетей.
, Очевидно, чем ближе Вы к 'соединительной линии' (ISP), а не 'лист' (Домашний маршрутизатор, домашний компьютер), тем большего количества материала можно осуществить сниффинг.
Со спуфингом DNS, взломщик может изменить тот маршрут так, чтобы он прошел через систему, которой они управляют.
Возможно самый легкий способ получить ощущение этого для попытки его за себя. Установка Wireshark, и видит, насколько легкий это для наблюдения материала, который проходит мимо.
XML :: Simple
имеет параметры, которые позволяют указать, как ввод будет преобразован в Структура данных Perl и то, как эта структура будет выводиться:
#!/usr/bin/perl
use strict;
use warnings;
use XML::Simple;
my $xml_file = 'b.xml';
my $xml = XMLin(
$xml_file,
KeepRoot => 1,
ForceArray => 1,
);
$xml->{outer1}->[0]->{inner1}->[1]->{name} = 'Shane Bond';
XMLout(
$xml,
KeepRoot => 1,
NoAttr => 1,
OutputFile => $xml_file,
);
XML :: Simple
действительно становится немного непростым, если вы делаете что-нибудь интересное, потому что его цель - не быть XML-библиотекой общего назначения, а предоставить простой способ работают с файлами конфигурации, написанными в XML.
CPAN имеет множество модулей, связанных с XML . Если это не единственная проблема, с которой вам пришлось столкнуться, стоит изучить некоторые из более функциональных и подходящих модулей.
Когда дело доходит до чтения или изменения XML-файла, то XML :: Twig часто оказывается первым инструментом, который я хочу использовать.
Сначала я подумал, что это может быть излишним для ваших требований, но потом я заметил, что в нем есть опция parsefile_inplace ():
use strict;
use warnings;
use XML::Twig;
XML::Twig->new(
pretty_print => 'indented',
twig_handlers => {
name => sub {
$_->set_text( 'Shane Bond' )->flush if $_->text eq 'Shanebond'
},
},
)->parsefile_inplace( 'data.xml', 'bak_*' );
NB. Если вы не хотите сохранять файл резервной копии, удалите второй аргумент ('bak _ *').
Вы пробовали XMLout с OutputFile
Из документации для XML :: Simple:
По умолчанию функция XMLout () возвращает XML в виде строки. Если вы хотите записать XML в файл, просто укажите имя файла с помощью параметра «OutputFile».
Этот параметр также принимает объект дескриптора ввода-вывода - особенно полезно в Perl 5.8.0 и более поздних версиях для вывода с использованием кодировки, отличной от UTF-8, например:
open my $fh, '>:encoding(iso-8859-1)', $path or die "open($path): $!";
XMLout($ref, OutputFile => $fh);
Зачем вообще обрабатывать его как XML? Почему бы просто не выполнить regexp-replace?
perl -pi -e 's/Shanebond/Shane Bond/' filename.xml
Это сделает замену на месте, сохраняя то же имя файла и все остальное.