0 x0起步

这将是第一个在一系列的博客文章,针对那些新Python和编程。 Python是一种非常强大的脚本语言,因为在信息安全社区的支持。 这种支持意味着许多工具都是用Python编写的,和有很多模块,可以利用脚本。 一个模块提供的功能,可以导入到一个脚本在几行代码来完成复杂的任务。

这篇文章假设您使用的是Linux操作系统,使用Python版本2. x。 一种编写Python代码时你可以直接到Python解释器或将其存储在一个文件中。 许多发现它非常有助于他们的代码直接写入一个Python解释器,并计算出逻辑和语法之前,它保存到一个文件。 记住,Python可以强制使用的缩进百度€™会遇到与声明函数,循环,if / else语句等。

Python解释器:
输入一个€˜pythona€™终端:

~$ python Python 2.7.3 Type "help", "copyright", "credits" or "license" for more information. >>> >>>

在这一点上你可以输入代码直接到Python解释器。 下面我们将定义两个变量,并使用类型()函数来看看我们创建一个字符串或整数:

>>> >>> ip = '8.8.8.8' >>> port = 53 >>> >>> type(ip) <type 'str'> >>> >>> type(port) <type 'int'> >>>

您可以使用内置的帮助()函数来了解一个特定的函数。 牢记这一点,你开始探索更多的功能在语言:

>>> >>> help(type) >>>

一件事有啊€™你通常要做的是把变量在一起打印输出脚本。 要做到这一点,你可能需要把一个整数字符串使用€œstr()一个€功能:

>>> >>> print "The IP is: "+ip+" and the port is: "+str(port) The IP is: 8.8.8.8 and the port is: 53 >>>

由于变量€œIPa€已经是一个字符串没有必要把它作为我们的一个€œ门€变量。 既然您已经看到了两个基本数据类型(字符串、整数)你可以探索不同的可用的内置函数与数据类型。

Python字符串允许您指定字符串中的特定偏移量,你可以检查一个给定的字符串的长度和len()函数。 这可能是有用的,当你开始做更高级的字符串操作:

>>> >>> domain='primalsecurity.net' >>> domain 'primalsecurity.net' >>> domain[0] 'p' >>> domain[0:3] 'pri' >>> domain[1:] 'rimalsecurity.net' >>> len(domain) 18

探索什么是可能的你可以使用dir()函数:

>>> >>> dir(ip) ['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_formatter_field_name_split', '_formatter_parser', 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill'] >>>

现在你可以开始利用这些内置字符串函数。 学习更多的关于一个给定的函数可以参考回帮助()函数:

>>> >>> help(ip.split) >>> >>> string = ip+':'+str(port) >>> string '8.8.8.8:53' >>> >>> string.split(':') ['8.8.8.8', '53']

函数打破了字符串分割成一个列表基于€˜:一个€™deliminator。 这是一个非常有用的字符串函数,因为你可以打破一行提取感兴趣的部分。 举个例子,如果我们只是想获取IP地址的列表,我们可以指定项目根据其索引列表中。 您还可以添加和删除项(从列表中。 附加,.remove):

>>> >>> list = string.split(':') >>> >>> list ['8.8.8.8', '53'] >>> >>> list[0] '8.8.8.8' >>> >>> list.append('google') >>> list ['8.8.8.8', '53', 'google'] >>> list.remove('google') >>> list ['8.8.8.8', '53'] >>> 

Python模块:

如前所述,Python模块是一个非常有用的方法使用更少的代码来完成复杂的任务。 Python有许多有用的内置模块(,的操作系统、子流程插座、urllib httplib的再保险公司系统,等等)和更多的第三方模块(cymruwhois、scapy dpkt,蜘蛛,等等)。 利用Python模块只需输入一个€œ导入< moduleName >€。 一个操作系统模块非常有用,因为你可以从Python代码中运行的操作系统命令:

>>> >>> import os >>> >>> dir(os) ['EX_CANTCREAT', 'EX_CONFIG', 'EX_DATAERR', 'EX_IOERR', 'EX_NOHOST', 'EX_NOINPUT', 'EX_NOPERM', 'EX_NOUSER', 'EX_OK', 'EX_OSERR', 'EX_OSFILE', 'EX_PROTOCOL', 'EX_SOFTWARE', 'EX_TEMPFAIL', 'EX_UNAVAILABLE', 'EX_USAGE', 'F_OK', 'NGROUPS_MAX', 'O_APPEND', 'O_ASYNC', 'O_CREAT', 'O_DIRECT', 'O_DIRECTORY', 'O_DSYNC', 'O_EXCL', 'O_LARGEFILE', 'O_NDELAY', 'O_NOATIME', 'O_NOCTTY', 'O_NOFOLLOW', 'O_NONBLOCK', 'O_RDONLY', 'O_RDWR', 'O_RSYNC', 'O_SYNC', 'O_TRUNC', 'O_WRONLY', 'P_NOWAIT', 'P_NOWAITO', 'P_WAIT', 'R_OK', 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'ST_APPEND', 'ST_MANDLOCK', 'ST_NOATIME', 'ST_NODEV', 'ST_NODIRATIME', 'ST_NOEXEC', 'ST_NOSUID', 'ST_RDONLY', 'ST_RELATIME', 'ST_SYNCHRONOUS', 'ST_WRITE', 'TMP_MAX', 'UserDict', 'WCONTINUED', 'WCOREDUMP', 'WEXITSTATUS', 'WIFCONTINUED', 'WIFEXITED', 'WIFSIGNALED', 'WIFSTOPPED', 'WNOHANG', 'WSTOPSIG', 'WTERMSIG', 'WUNTRACED', 'W_OK', 'X_OK', '_Environ', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '_copy_reg', '_execvpe', '_exists', '_exit', '_get_exports_list', '_make_stat_result', '_make_statvfs_result', '_pickle_stat_result', '_pickle_statvfs_result', '_spawnvef', 'abort', 'access', 'altsep', 'chdir', 'chmod', 'chown', 'chroot', 'close', 'closerange', 'confstr', 'confstr_names', 'ctermid', 'curdir', 'defpath', 'devnull', 'dup', 'dup2', 'environ', 'errno', 'error', 'execl', 'execle', 'execlp', 'execlpe', 'execv', 'execve', 'execvp', 'execvpe', 'extsep', 'fchdir', 'fchmod', 'fchown', 'fdatasync', 'fdopen', 'fork', 'forkpty', 'fpathconf', 'fstat', 'fstatvfs', 'fsync', 'ftruncate', 'getcwd', 'getcwdu', 'getegid', 'getenv', 'geteuid', 'getgid', 'getgroups', 'getloadavg', 'getlogin', 'getpgid', 'getpgrp', 'getpid', 'getppid', 'getresgid', 'getresuid', 'getsid', 'getuid', 'initgroups', 'isatty', 'kill', 'killpg', 'lchown', 'linesep', 'link', 'listdir', 'lseek', 'lstat', 'major', 'makedev', 'makedirs', 'minor', 'mkdir', 'mkfifo', 'mknod', 'name', 'nice', 'open', 'openpty', 'pardir', 'path', 'pathconf', 'pathconf_names', 'pathsep', 'pipe', 'popen', 'popen2', 'popen3', 'popen4', 'putenv', 'read', 'readlink', 'remove', 'removedirs', 'rename', 'renames', 'rmdir', 'sep', 'setegid', 'seteuid', 'setgid', 'setgroups', 'setpgid', 'setpgrp', 'setregid', 'setresgid', 'setresuid', 'setreuid', 'setsid', 'setuid', 'spawnl', 'spawnle', 'spawnlp', 'spawnlpe', 'spawnv', 'spawnve', 'spawnvp', 'spawnvpe', 'stat', 'stat_float_times', 'stat_result', 'statvfs', 'statvfs_result', 'strerror', 'symlink', 'sys', 'sysconf', 'sysconf_names', 'system', 'tcgetpgrp', 'tcsetpgrp', 'tempnam', 'times', 'tmpfile', 'tmpnam', 'ttyname', 'umask', 'uname', 'unlink', 'unsetenv', 'urandom', 'utime', 'wait', 'wait3', 'wait4', 'waitpid', 'walk', 'write'] >>>

正如上面你可以看到操作系统模块给你加载的功能。 我发现自己使用很多是€œ操作系统。 systema€以来我们可以通过一个命令,它由底层操作系统执行。 下面我们将执行以下命令€œ呼应一个€˜UHJpbWFsIFNlY3VyaXR5Cg = =€™| base64 - da€:

>>> >>> os.system("echo 'UHJpbWFsIFNlY3VyaXR5Cg==' | base64 -d") Primal Security >>>

创建一个文件对象:
现在,我们将介绍一些基本的例子如何从文件中读取数据,在Python中创建一个文件。 下面的屏幕截图展示了如何创建一个文件对象,和读/写数据对象。 一个经常百度€™会发现自己从文件读入输入,然后做一些逻辑写作输出到一个文件:

>>> >>> file = open('test.txt', 'w') >>> file.write('Hello World') >>> file.close()     >>> file = open('test.txt', 'r') >>> file.readlines() ['Hello World'] >>>

实践这些概念在Python解释器巩固他们,因为他们将在未来的教程杠杆在更复杂的例子。 当开发代码我喜欢有两个平行于每一个终端,直接输入到一个Python解释器,和其他拉到一个脚本的逻辑。 下一个教程超过编码在实际的Python脚本,定义类和系统模块。


评论

© 风带走故事也带走 | Powered by LOFTER