前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >0x0 Python教程:入门

0x0 Python教程:入门

作者头像
重生信息安全
发布2020-04-26 12:48:10
1.4K0
发布2020-04-26 12:48:10
举报
文章被收录于专栏:重生信息安全重生信息安全

这将是一系列针对Python和编程新手文章中的第一篇。Python是一种非常强大的脚本语言,因为它在InfoSec社区中具有支持。这种支持意味着许多工具都是用Python编写的,并且有许多模块可以在脚本中使用。模块提供的功能可以导入到脚本中,以便在几行代码中完成复杂的任务。

本文将假设您使用的是Linux操作系统并使用Python 2.x版。编写Python代码时,您可以直接将其键入Python解释器或将其存储在文件中。许多人发现将代码直接编写到Python解释器中并在将其保存到文件之前计算出逻辑和语法非常有用。请记住,Python强制使用缩进,您将在声明函数,循环,if / else语句等时遇到这些缩进。

Python解释器: 在终端中输入'python':

代码语言:javascript
复制
~$ python
Python 2.7.3
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>>

此时,您可以直接在Python解释器中键入代码。下面我们将定义两个变量,并使用type()函数来查看我们是否创建了一个字符串或整数:

代码语言:javascript
复制
>>>
>>> ip = '8.8.8.8'
>>> port = 53
>>>
>>> type(ip)
<type 'str'>
>>>
>>> type(port)
<type 'int'>
>>>

您可以使用内置的help()函数来了解特定的函数。当您开始探索该语言中的更多功能时,请记住这一点:

代码语言:javascript
复制
>>>
>>> help(type)
>>>

您通常要做的一件事是将变量连接在一起以打印脚本的输出。为此,您可能需要使用“str()”函数将整数转换为字符串:

代码语言:javascript
复制
>>>
>>> print "The IP is: "+ip+" and the port is: "+str(port)
The IP is: 8.8.8.8 and the port is: 53
>>>

由于变量“IP”已经是一个字符串,因此无需像使用“port”变量那样进行转换。现在您已经看到了两种基本数据类型(String和Integer),您可以探索可用于与该数据类型交互的不同内置函数。

Python字符串允许您在字符串中指定特定的偏移量,并且可以使用len()函数检查给定字符串的长度。当您开始执行更高级的字符串操作时,这会很有用:

代码语言:javascript
复制
>>>
>>> domain='primalsecurity.net'
>>> domain
'primalsecurity.net'
>>> domain[0]
'p'
>>> domain[0:3]
'pri'
>>> domain[1:]
'rimalsecurity.net'
 
>>> len(domain)
18

要探索可能的内容,可以使用dir()函数:

代码语言:javascript
复制
>>>
>>> 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()函数:

代码语言:javascript
复制
>>>
>>> help(ip.split)
>>>
>>> string = ip+':'+str(port)
>>> string
'8.8.8.8:53'
>>>
>>> string.split(':')
['8.8.8.8', '53']

split函数将字符串拆分为基于':'分隔符的列表。这是一个非常有用的字符串函数,因为您可以细分一行来仅提取感兴趣的部分。例如,如果我们只想从列表中获取IP地址,我们可以根据列表中的索引指定我们想要的项目。您还可以使用(.append和.remove)在列表中添加和删除项目:

代码语言:javascript
复制
>>>
>>> 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有许多有用的内置模块(os,subprocess,socket,urllib,httplib,re,sys等)以及更多的第三方模块(cymruwhois,scapy,dpkt,spider等)。要利用Python模块,只需键入“import <moduleName>”。os模块非常有用,因为您可以在Python代码中运行OS命令:

代码语言:javascript
复制
>>>
>>> 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']
>>>

正如您在上面所看到的,os模块为您提供了大量功能。我发现自己经常使用的是“os.system”,因为我们只需传递一个命令并让它由底层操作系统执行。下面我们将执行以下命令“echo”UHJpbWFsIFNlY3VyaXR5Cg =='| base64 -d“:

代码语言:javascript
复制
>>>
>>> os.system("echo 'UHJpbWFsIFNlY3VyaXR5Cg==' | base64 -d")
Primal Security
>>>

创建文件对象: 现在我们将展示一些如何从文件中读取数据并在Python中创建文件的基本示例。下面的屏幕截图演示了如何创建文件对象以及如何读取/写入对象的数据。通常,您会发现自己从文件中读取输入,执行某些逻辑,然后将输出写入文件:

代码语言:javascript
复制
>>>
>>> file = open('test.txt', 'w')
>>> file.write('Hello World')
>>> file.close()    
>>> file = open('test.txt', 'r')
>>> file.readlines()
['Hello World']
>>>

在Python解释器中练习这些概念以巩固它们,因为它们将在未来的教程中用于更复杂的示例中。在开发代码时,我希望有两个与每个终端并行的终端,一个直接键入Python解释器,另一个将逻辑拉入脚本。下一个教程将介绍实际Python脚本,定义,类和sys模块中的编码。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 重生信息安全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档