Я собираюсь начать 4-летнюю степень информационной безопасности в Пердью. Степень не требует каких-либо курсов программирования. Таким образом, единственный раз, когда я смогу взять один, является случайным факультативным. Так что большая часть моего обучения будет самостоятельно. В начале моего старшего курса средней школы я решил полностью переключиться на Linux. До сих пор я изучал некоторые материалы по Linux и безопасности. Однако я также считаю, что для меня будет важно выучить несколько языков программирования.
В основном я планирую учиться программировать параллельно с обучением использованию Vim. Так что, скорее всего, это будет медленный процесс. В конце концов, я думаю, это того стоит. Как я уже сказал, я займусь безопасностью, поэтому я буду в основном создавать приложения, связанные с безопасностью, большинство из которых будут связаны с сетью. Я также хотел бы начать разработку приложений для Android, но это будет позже в будущем.
С учетом сказанного у меня есть несколько идей. Я думал начать с JavaScript, потому что он кроссплатформенный, и я уже видел это раньше. Я также много слышал о Ruby или мог бы пойти естественным путем Linux с C. В каком направлении мне идти?
Вы обнаружите, что все будут просто рекомендовать свой любимый язык. Мой любимый язык - Perl, поэтому я рекомендую это. :) Однако, помимо моих личных предпочтений, есть несколько веских причин, по которым вам стоит подумать об использовании perl:
Во-первых, Perl - замечательный язык общего назначения. В Perl легко начать писать простые сценарии, которые выполняют те же действия, что и сценарии оболочки, например, манипулируют файлами и принимают решения на основе пользовательского ввода. Это обеспечивает очень простое и постепенное введение в общие идеи программирования. Perl существует довольно давно, поэтому есть много ресурсов (книг и веб-сайтов) для начала.
Во-вторых, Perl - это невероятно мощный и выразительный язык, который поддерживает все современные функции программирования. Я использую его более пятнадцати лет, и я все еще изучаю новые способы сделать вещи более эффективно. Например, если вы хотите исследовать объектно-ориентированное программирование, это есть в perl (особенно через Moose ).
В-третьих, Perl обладает практически неограниченной мощью и гибкостью своего официального хранилища дополнений CPAN . Например, чтобы следовать идее написания защитного программного обеспечения, скажем, вы хотите разработать какой-то специальный сканер сетевой безопасности. Вместо того, чтобы писать все это самостоятельно, вы можете начать с использования NMAP :: Scanner в качестве движка сканирования, а затем написать свои собственные настройки и улучшения.
Наконец, если вы хотите изучить веб-программирование, в Perl это тоже есть. Одним из популярных современных способов написания веб-программного обеспечения на Perl является Catalyst , который предоставляет современную веб-инфраструктуру MVC для быстрой разработки любого веб-приложения.
Собирая все это вместе, преимущество perl состоит в том, что он позволяет вам начинать с небольшого написания небольших сценариев и программ командной строки и постепенно переходить к написанию полнофункциональных современных приложений. Конечно, цена этой гибкости - сложность. Вы должны учиться и учиться тому, как все делать правильно, Perl не применяет хорошие методы, как это делают другие языки. Лично мне нравится эта свобода, особенно в сочетании со всеми огромными ресурсами в сети, где можно научиться использовать Perl.
источник
Три языка помогут вам в этом. В порядке убывания важности (т. Е. Первое является наиболее важным):
источник
script language
, какpython
илиPHP
.Вы должны выучить несколько языков. Я бы предложил начать с Python. Его широко рекомендуют за то, что он прост в освоении и очень полезен, множество отличных материалов для самостоятельного обучения доступно бесплатно, и я полагаю, что они широко используются профессионалами в области ИТ-безопасности. Почти каждый раз, когда я вижу, что профессионалы в области безопасности после демонстрации кода, это Python.
источник
Я единственный, кто думает, OMG !!!! в этот момент?
Я бы так сказал. Хотя вы и не рассчитываете стать опытным программистом, вам, вероятно, понадобятся навыки, необходимые для моделирования / воссоздания атак и понимания того, как работает процесс программирования. Вам также понадобятся навыки для анализа данных и извлечения информации из массовых источников (например, журналов). JimB упомянул bash - и, несмотря на то, что вы, несомненно, будете его использовать, - потребуется всего несколько часов, чтобы выучить основные моменты. На самом деле единственное место, где вы можете увидеть bash, - это системы Linux, но другие оболочки очень похожи.
Я бы порекомендовал изучить awk и / или Perl для обработки данных. Не беспокойтесь ни о каком требовании пометить объектно-ориентированный блок - но я бы порекомендовал взглянуть и на непроцедурные языки.
Изучение C также предоставит вам много информации о том, как код превращается в исполняемую программу (компиляция - только один шаг в очень сложном процессе).
Очевидным выбором для тех, кто интересуется разработкой для Android / мобильных устройств, была бы Java, но Java очень старается оградить разработчика от необходимости иметь дело с реалиями работы и протоколов - мой опыт показывает, что именно здесь вы сталкиваетесь с проблемами безопасности с Java Программы. то есть это может помочь вам в достижении вашей конечной цели, и будет хорошо смотреться на вашем резюме, но не ожидайте, что изучение Java значительно дополнит ваши знания в области безопасности.
источник
Мой совет:
bash
(и тому подобное) не являются языками программирования общего назначения. В то время как возможно выполнить некоторые сложные сценарии,bash
это не лучший способ изучить программирование в целом. Это наиболее естественный способ выполнения задач системного администрирования, которые в основном связаны с выполнением других программ, обработкой их файлов данных и каталогов, а также распределением входных и выходных данных в них и из них. Еслиbash
это молоток, зарезервируйте его для задач, которые действительно похожи на гвозди. Научиться делать что-нибудь нетривиальное вbash
будет значительно легче, если вы выучите несколько очень маленьких подмножествsed
иawk
(поскольку манипулирование строками вbash
значительной степени основано на синтаксисе подобных операций в этих «маленьких» языках).Я рекомендую вам прочитать вводный текст на языке C и потратить некоторое время на выполнение команд
strace
andltrace
для некоторых простых служебных команд, таких какls
andmkdir
и/bin/echo
т. Д. (На самом деле, в эти дни я бы предложилltrace -S
вместо всегоstrace
лишь наброски в вывод обеих команд и вltrace
выход как дополненные в-S
опции будет чрезвычайно образовательным).C является основным языком программирования, на котором написано ядро Linux и GNU libc. (Мелкие детали в сборе). Почти все программы в системе Linux (или другой UNIX-подобной) связаны с библиотеками C (libc). Первичные интерпретаторы Perl и Python (и большинство других языков сценариев) также написаны на C. Эти программы (ядро, общие системные библиотеки и различные интерпретаторы языков сценариев) написаны программистами на C, поскольку их дизайн и возможности находятся под сильным влиянием. их основными реализациями. Таким образом, более глубокое понимание любого из них в конечном итоге влечет за собой понимание C. Вам не нужно ничего знать о C ++ или Java, чтобы понимать программирование на этом уровне. (Каждый из них может быть интересным и необходимым по-своему, в зависимости от вашей карьеры,
Итак, если вы согласны с моими предпосылками, мы свелись к выбору между Perl и Python.
Вот где начинаются настоящие пламенные войны.
Мой совет должен сосредоточиться на Python (2.x) в первую очередь. Python имеет относительно простой и последовательный синтаксис. Вы можете изучить основы синтаксиса Python за несколько часов, и это подавляющее большинство синтаксиса, с которым вы когда-либо сталкивались. Есть только несколько функций (списки, генераторные выражения, декораторы), которые складываются в основной синтаксис. Поэтому большая часть ваших усилий по изучению Python будет посвящена изучению обширных стандартных библиотек и попыткам найти «лучший» способ их использования (и выяснению, какие именно наборы исключений стоит обработать, чтобы сделать ваши программы устойчивыми) и, самое главное, в изучении основных понятий.
Я думаю, что обширные библиотеки Python и относительно простой синтаксис имеют два явных недостатка.
Во-первых, когда вы узнаете, как работать на очень высоком уровне в Python, вам может показаться утомительной необходимость работать на более низком уровне. Где я работаю, Perl является стандартом. Я создаю прототип своей работы на Python, где я знаю, что могу заставить ее работать намного быстрее и надежнее, чем в Perl; затем я боюсь пройти через это и перенести его на Perl для моих коллег. (Я был достаточно хорош в Perl за годы до того, как я использовал Python - так что дело не в простом знакомстве).
Другим недостатком является то, что иногда трудно найти самый высокий уровень для выполнения данной задачи в Python. Например, чтобы получить веб-страницу, вы можете сначала попытаться сделать это с низкоуровневыми сокетами ... что сработает. Тем не менее, вы будете дублировать довольно много кода, который уже можете найти, в том числе в модулях
urllib
и / илиurllib2
. Сам факт того, что стандартные библиотеки, начиная с версии 2.7.1, включают в себя оба из них, подтверждает мою точку зрения. По возможности сопровождающие Python прозрачно расширяли старые модули и API; однако есть десятки случаев, когда Python сохраняет два или три модуля, где прозрачное расширение по какой-то причине было невозможно. ( В качестве другого примера можно посмотреть на варианты для разбора параметров командной строки:argparse
,optparse
иgetopt
, Там мало вреда для написания ваших программ с использованиемgetopt
(самая старая из них). Для очень простых утилит с небольшим количеством опций и жестким соглашением о вызовах (например, используемым только небольшой группой людей) нет ничего плохого в том, чтобы ходить поsys.argv
себе. Однако обычно стоит внимательно прочитать документы и перейти по ссылкам внизу модулей более старого или более низкого уровня, в которых описаны доступные функции более нового или более высокого уровня.Мой совет основан на моем мнении, что вы хотите сосредоточиться на более глубоких концепциях и не тратить много времени и сил на синтаксические и языковые проблемы. Понимание того, когда использовать подпроцесс, а не поток или функции многопроцессорной обработки, включенные в Python, имеет относительно мало общего с языком и все, что связано со знанием программирования, независимо от языка. (В тот момент, когда вы сможете понять аргументы в отношении управляемой событиями модели Twisted по сравнению с многопоточностью и многопроцессорностью, вы, вероятно, освоите Python и будете готовы программировать на любом языке).
Встречный аргумент для Perl прост и практичен. Есть еще несколько рабочих мест, которые будут требовать, в частности, навыков работы с Perl. Perl является мощным языком и имеет чрезвычайно обширные библиотеки. (Ядро Perl, распространяемое с большинством систем Linux, охватывает меньший набор функций, чем стандартные библиотеки Python; предполагается, что вы установили значительное количество дополнительных пакетов из своего дистрибутива или через CPAN - всеобъемлющий архив Perl Сеть). (В отличие от этого, существует меньше модулей и пакетов Python, которые мне нужно извлекать отдельно ... они доступны из PyPI - индекса пакетов Python).
Таким образом, если вы изучите Perl, вы сможете быстро найти работу, особенно сисадмина, в краткосрочной перспективе. Однако синтаксис Perl ... ну ... по словам некоторых его энтузиастов ... "патологически эклектичен!" Perl может быть очень кратким, и его код заполнен пунктуацией. Те, кто любит это, будут бесконечно утверждать, что это «легко» и имеет смысл - и у них будут бесконечные возможности сделать это на форумах, которые полны путаницы в том, как именно интерпретируется данный фрагмент кода. Синтаксис и язык, используемый в документации, а также теми, кто поддерживает его на публичных форумах, детализированы до такой степени, что вы можете потратить значительные усилия на их изучение.
Теперь, пожалуйста, поймите, что этот предыдущий комментарий субъективен и предвзят. Возможно, вы попробуете Perl и найдете его синтаксис интуитивно понятным и приятным. Если это так, больше сил для вас. Тем не менее, я лично нахожу, что мое понимание идиосинкразий Perl очень быстро разрушается. Принципы, которые я сохраняю, но я считаю, что это борьба, когда мне приходится переключаться на нее более чем на несколько строк кода.
Есть много других языков, которые вы будете изучать, Java, Lisp и Scheme, TCL, Scala и так далее. Тем не менее, я бы предложил начать с того, который предлагает лучший баланс между полезностью и простотой.
источник
В мире Linux вы должны знать две основные вещи:
Regular Expression
, Это обязательно.RegEx
это универсальный «язык», если вы знаете, как использовать регулярные выражения, ваша жизнь станет намного проще :-)quick & dirty
" очень распространен в мире Linux. Если вы можете выполнить свою работу, независимо от того, насколько уродливым является ваше решение, ваша работа будет выполнена.Итак, если вы хотите изучать язык на Linux, вы ДОЛЖНЫ выбрать
script language
, какpython
,PHP
или дажеbash scripting
.И, мой рекомендую
PHP
. Это просто и некрасиво. Имеет подробное онлайн-руководство . Имеет хорошуюRegEx
поддержку. Это все.источник
Вы можете выполнить практически любую задачу практически на любом языке, поэтому правильный выбор в значительной степени зависит от решаемой проблемы.
Определенно стоит знать языки из следующих категорий:
Я приложил бы усилия для изучения C / C ++, поскольку это допускает повреждение стека и прямой доступ к памяти. Это важно, если вы хотите поэкспериментировать с проблемами безопасности. Многие языки имеют C-подобный синтаксис (включая JavaScript), поэтому это хороший трамплин.
Если вы много работаете в оболочке, и я думаю, что вы изучаете vim, то в конечном итоге вы изучите базовые сценарии оболочки как побочный эффект. UNIX Power Tools была хорошей книгой для изучения более сложных вещей; Я не знаю, опубликовано ли оно до сих пор.
PHP также может быть хорошим языком для изучения; Основное преимущество, которое он предлагает новым программистам, заключается в том, что в него встроен большой функционал, а не библиотека, на которую нужно ссылаться (что не является сложной задачей). Поэтому просмотр основных документов научит вас многим вещам.
источник
Сначала несколько негативных советов:
Не делай этого. Найдите редактор, который действительно удобен. Изучение и языка, и редактора в три раза сложнее, чем изучение их по порядку (очевидно, редактор должен идти первым :-))
Связанные с сетью приложения безопасности? С здесь нет легкого выбора. Вам нужно будет получить доступ к сети на уровне системного API, что означает, что C - это путь. Конечно, это не означает, что все должно быть в C - библиотека C +
$favorite-high-level-language
оболочка может избавить вас от проблем, связанных с C, в частях, которые не нуждаются в C.Могу поспорить, что это было предложено в контексте, отличном от вашего. У JavaScript есть свои сильные стороны, но пока он не является хорошим языком общего назначения. JS не имеет стандартных библиотек, сравнимых с библиотеками C, Python, Perl, Ruby, Java и компании.
Кстати,
$favorite-high-level-language
мой совет - пойти с Python. Он прекрасно взаимодействует с C, поставляется с большим количеством полезных библиотек и имеет гораздо больше библиотек, доступных как дополнения.источник
Нет ничего плохого в изучении Javascript, но он работает только под браузером, поэтому ваше программирование будет ограничено приложениями, связанными с веб-страницами.
Вероятно, существует столько же ответов на вопрос «с чего начать хороший язык программирования», сколько существует языков. Мое преимущество состоит в том, что вы могли бы сделать хуже, чем начинать с базовых сценариев оболочки, просто посмотреть, что вы можете сделать, чтобы автоматизировать задачи без использования чего-либо, кроме оболочки, а затем расширить это с помощью Perl или аналогичного языка, который вырос из необходимости делать задачи, более сложные, чем способная оболочка, после этого, и, если вы действительно заинтересованы, это займет всего несколько недель, начните использовать C или производную.
источник
Мои рекомендации? Хммм. Ну, возможно, вам придется решить, как вы идете. Для полезного, хорошо округленного диапазона вы можете пойти по обычному маршруту CS, возможно, не в этом порядке.
(1) C / C ++ - вы можете получить объектно-ориентированные вещи, и, по крайней мере, вы попробовали. C ++ - это «профессиональный» стандарт. (2) Сборка (чуть-чуть - это поможет вам понять реальную работу процессора, памяти и т. Д. - вам не нужно жениться на ней.) (3) Python / Perl / Bash - получите эти языки сценариев, они будут наиболее полезны для вашего уровня Linux (4) PHP / Ruby, MySQL и HTML - просто включите свое веб-программирование! Вы поймете весь процесс взаимодействия сервер-клиент, другой уровень вычислений.
Нужны полезные концепции? AI, нейронные сети. Это должно окружить вас.
Вы можете выбрать один из них или коснуться всех из них. Мой язык? Все они, по мере необходимости, но я программирую с 1984 года, и у меня есть степень CS, написанные игры и всевозможные приложения для встроенных систем. Это то, что я делаю. Вам необходимо выяснить, кто вы и чем занимаетесь. Просто убедитесь, что вам весело.
Наслаждайтесь!
источник
упс, неверно истолкована информационная безопасность для информационных систем ... да ладно, большая часть этого все еще применяется
Джава
Честно говоря, если вы работаете в Linux и проходите начальный курс по программированию на Java, а затем, возможно, последует еще пара курсов по программированию, другие инструменты, такие как Bash sed / awk и т. Д., Должны как-то встать на свои места. Если вы действительно попадаете в системы, вы можете получить немного C позже, но я бы не сказал, что он пользуется большим спросом, и я бы даже не сказал, что это требование быть системным парнем - если только вы не разбираетесь во внутренних системах.
YMMV
источник