標籤:

0x0:入門

##入門

這將是第一個一系列關於python編程的博客文章。python是一門非常強大的語言,因為它有信息安全社區的支撐。這意味著很多工具都是由python編寫並且可以在腳本中調用很多模塊。使用模塊的好處就是只需要少量的代碼就能夠完成所需的任務。

這篇文章假定你的系統是Linux,python版本是2.*。在寫代碼的時候你也可以直接的寫在解釋器裡面(linux裡面輸入python即可進入),也可以把代碼放到一個文件裡面。很多人會發現把代碼存放到文件裡面要比直接寫在解釋器上面要好很多。值得注意的是python 中強制縮進。大家在寫函數聲明,循環,if/else語句等等的時候就會發現。

python解釋器

在終端裡面輸入python:

~$ pythonnPython 2.7.6 (default, Mar 22 2014, 22:59:56) n[GCC 4.8.2] on linux2nType "help", "copyright", "credits" or "license" for more information.n>>> n

輸入之後你就可以直接在解釋器裡面寫你的代碼了。下面我們將聲明兩個變數,並且使用type()函數查看變數的類型。假設我們聲明了一個字元串和整型:

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

你可以使用內置的help()函數去了解一個函數的詳細。記住這一點,它可以幫助你在學習語言的時候學習到更多的詳細內容.

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

有時你會想把一些變數和字元串連接起來然後通過腳本顯示出來。那麼你就需要使用str()函數把整型轉換成字元串類型

>>> ip=1.1.1.1n>>> port=55n>>> print the ip is:+ip+and the port is:+str(port)nthe ip is:1.1.1.1and the port is:55n

前面聲明變數的時候"IP"就是一個字元串就不需要轉換,而"port"就需要。現在你就已經知道了兩個基本的數據類型(string和integer)。現在你可以試試使用內置函數與這兩個數據類型寫出其他的代碼。

Python字元串允許你通過偏移值來獲取你想需要的字元串,並且可以通過len()函數來獲取字元串的長度,它可以幫助你更方便的操作字元串。

>>>n>>> domain=primalsecurity.netn>>> domainnprimalsecurity.netn>>> domain[0]npn>>> domain[0:3]nprin>>> domain[1:]nrimalsecurity.netn n>>> len(domain)n18n

你可以使用內建的dir()函數來列出模塊定義的標識符。標識符有函數、類和變數。

>>> dir(ip)n[__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]n

現在你可以使用上面列舉出來的內建字元串函數,如果想知道這個函數的更多描述可以參考前面提到的help()函數:

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

這split函數把一個字元串通過":"切割生成一個新的列表。這是一個非常有用的字元串函數因為你能夠把這個字元串裡面的有用信息提出出來。例如,你獲取到了一個ip列表,你想在這個列表裡面添加一個索引值。你也可以刪除和添加新的值到這個列表裡面通過.append()和.remove()函數

>>>n>>> list = string.split(:)n>>>n>>> listn[8.8.8.8, 53]n>>>n>>> list[0]n8.8.8.8n>>>n>>> list.append(google)n>>> listn[8.8.8.8, 53, google]n>>> list.remove(google)n>>> listn[8.8.8.8, 53]n>>> n

Python模塊

在上面提到過,Python模塊能夠讓你用少量的代碼就能夠完成你的任務,Python有許多有用的內建模塊(os,subprocess,socket,urllib,httplib,re,sys等等)和第三方模塊(cymruwhois,scapy,dpkt,spider等等).使用Python模塊很簡單"import ". OS模塊是非常重要的因為你需要在你的Python代碼裡面調用系統命令:

>>>n>>> import osn>>>n>>> dir(os)n[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]n>>>n

你可以看到上面os模塊給你提供了很多可以使用的功能函數,其中我發現我經常使用"os.system",我可給它傳遞一個命令,然後通過它去在系統底層執行我們傳遞的命令.下面我們將會執行一個命令"echo 『UHJpbWFsIFNlY3VyaXR5Cg==』 | base64 -d":

>>>n>>> os.system("echo UHJpbWFsIFNlY3VyaXR5Cg== | base64 -d")nPrimal Securityn>>>n

創建一個文件對象

現在我們將演示一些例子,如何在Python裡面從一個文件裡面讀取數據和創建一個文件。下面的這個例子演示了如何創建一個文件對象,並且讀取/寫入數據到這個對象裡面,通常你自己讀取一個文件的數據,並且做一些邏輯處理然後把輸出的寫到文件裡面:

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

在Python解釋器裡面練習上面的內容並且多加鞏固,因為這些內容在後面的章節裡面會經常使用,當我寫代碼的時候,我喜歡打開兩個終端,一個用於執行python解釋器,還有一個用來把邏輯寫入到腳本裡面。下一章將會寫一個真實的Python腳本, 聲明定義,類和sys模塊。


推薦閱讀:

Python從零開始系列連載(13)——Python程序的基本控制流程(上)
python3下安裝aiohttp遇到過的那些坑
十分鐘入門pandas(中)【解讀pandas官方文檔】
Python 繪製分形圖(曼德勃羅集、分形樹葉、科赫曲線、分形龍、謝爾賓斯基三角等)附代碼
使用Flask開發簡單博客的教程(上)

TAG:Python教程 |