2015-07-12 2 views
1

Это один из самых первых случаев, когда я писал на форуме. Обычно просто читать достаточно, чтобы найти то, что я ищу.Испытание на проникновение с Perl не объектно-ориентированное

У меня есть достойная основа с Perl, и я хотел бы провести с ней тестирование на проникновение. Моя проблема в том, что каждый учебник или книга, которую я нахожу, работает с LWP, объектно-ориентированным, и я откровенно ненавижу объектно-ориентированное программирование (это не имеет для меня никакого смысла, как функциональное программирование). Если есть какой-либо модуль CPAN для «веб-программирования», который может работать без ООП, Google очень стесняется сказать мне.

Несмотря на то, что это должно быть много работы, я хотел бы написать LWP-подобный модуль, но с функциональным стилем программирования вместо OOP.

Главный вопрос: с чего начать? Я очень мало нашел в программировании сокетов с Perl, который не использует LWP или какой-то неясный модуль Perl. Чем меньше я буду использовать CPAN, тем больше я буду счастлив.

Я понимаю, что это немного напоминает изобретательство колеса, но я хочу сделать это в основном для удовольствия, а иногда это лучший способ узнать.

+1

socket() - ваш друг ? http://perldoc.perl.org/perlipc.html#Sockets%3a-Client%2fServer-Communication. К какому второму модулю вы относитесь? –

+1

Я думаю, что ссылка, которую вы мне дали, это именно то, что мне нужно. Странно, что он никогда не появлялся в моих поисках Google. В любом случае спасибо! – Nooop

ответ

2

socket, bind, listen и accept - это самые основные функции, которые вы ищете для реализации серверных функций; socket и connect являются клиентскими.

Раздел Sockets: Клиент/Сервер связи в perldoc perlipc должны дать дальнейшие рекомендации. Функции, упомянутые здесь, непосредственно сопоставляются с соответствующими системными вызовами. Более низкоуровневый (и более болезненный), чем вы не могли надеяться найти.

Будучи страстным ненавистником чрезвычайно сложного и раздутого ООП, я хотел бы дать вам совет, чтобы взглянуть на то, как ООП выполняется на Perl. Может быть, вы влюбитесь в это, как я когда-то.

Будучи не более чем bless ed хешей сами. Нежелание использовать какие-либо объекты Perl более или менее эквивалентно тому, что вы вообще не хотите использовать какие-либо хеши.

+0

Спасибо, Микира. Я перешел к главе Oop начала Perl на www.perl.org, я понимаю основные из них, я думаю. По какой-то причине oop не кажется мне структурированным, я не знаю, как это происходит с другими языками, поскольку Perl и bash - единственные, кого я знаю до сих пор. Я люблю Perl и хотел писать программы, которые были бы полезны для меня, так как я тоже медленно пытаюсь погрузиться в пылкий мир, я думал, что могу присоединиться к обоим. Теперь, если действительно написать LWP-модуль в функциональном программировании менее эффективен, чем oop, возможно, мне стоит попробовать и узнать больше об этом. – Nooop

2

Я настоятельно рекомендую вам узнать, как Perl обрабатывает объектно-ориентированное программирование. Я считаю, что это, безусловно, лучшее введение в ООП, поскольку оно ничего не скрывает, и все механизмы раскрыты.Класс - это пакет, метод - это подпрограмма, а ваш конструктор - это еще один метод.

Вам, вероятно, не придется создавать классы Perl самостоятельно, если вы пишете небольшие служебные программы, но как только вы захотите использовать другие народные библиотеки, вам, вероятно, понадобится знать, как использовать OO Perl

LWP, возможно, является одной из наиболее сложных библиотек, так как он имеет несколько разных классов, но помните, что the documentation должен описывать функциональность в целом и, по крайней мере, изначально, вы не будете использовать большую часть того, что доступно

Чтобы получить простую веб-страницу, вам нужно всего лишь t о сделать, это создать LWP::UserAgent объект и использовать его для get в URL вы заинтересованы в

use LWP; 

my $ua = LWP::UserAgent->new; 
my $res = $ua->get('http://www.example.com/'); 

Теперь у вас есть HTTP::Response объект, $res, и вы можете прочитать documentation for that class увидеть, какие методы он поддерживает, например, проверка состояния и извлечения HTTP заголовки и тело сообщения

Это в значительной степени все, что простое программирование LWP, но есть много вариантов, чтобы в более сложных ситуациях, если вам нужно их

В заключение, стоит отметить, что есть уже функциональный HTTP-модуль под названием LWP::Simple. Если вам нужна самая базовая функциональность, вы можете написать только

use LWP::Simple; 

my $body = get('http://www.example.com/'); 

и вы получили веб-страницу. Конечно, это не позволяет вам проверить статус транзакции HTTP и заголовки в ответном сообщении, поэтому, если вам нужна эта возможность или больше, вам нужно использовать стандартный интерфейс LWP.

+0

Спасибо, Бородин. Я верю, что opp скрывает от меня слишком много недостатков. Под этим я подразумеваю, что даже я могу получать веб-страницы, легко создавать пользовательские агенты и т. Д., Я до сих пор не знаю, как они работают. Честно говоря, если бы у меня было время, я бы с удовольствием научился C. Я сварщик, работающий 6/7, делающий 12-ю смену. Я хочу «переписать LWP», чтобы я мог узнать, как все работает, а не обязательно, потому что мне не нравится LWP. Правда, oop меня не привлекает, но опять же, это больше для процесса обучения. Надеюсь, я ясно объяснил. (я - французский парень), спасибо за все ваши ответы !! – Nooop

+0

Ваш английский очень ясный, спасибо. 'LWP' в свою очередь полагается на [' IO :: Socket :: INET'] (https://metacpan.org/pod/IO::Socket::INET) для интерфейса OOP для сокетов интернет-домена, и вы должны посмотрите, как реализовать функциональный модуль. Но перед вами стоит огромная задача, так как реализация в значительной степени зависит от * черных ящиков *, которые обеспечивают более примитивные примитивы на основе API для уровня ниже – Borodin

+0

Если бы это было только много работы, это не было бы слишком плохо, может быть, я должен был добавить, что около 7 месяцев назад я даже не знал, что такое linux ... Это больше похоже на бесконечную гору, пытающуюся подняться;) Во всяком случае, большое спасибо за вашу помощь.Я попытаюсь опубликовать некоторый код один раз, и если я окончательно получу что-то приличное. – Nooop

Смежные вопросы