0X00 前言

此书名为《Python绝技:运用Python成为顶级黑客》。
书中使用的代码为Python 2.6.5版本,与Python3有部分语法不通,会产生报错。由于我使用的是Python 3.6.6版本,故在之后的学习笔记中我会将报错的部分改为python3适用的亚子,同时在有修改的部分会用三个连续井号(###)以示标注。
此为读书笔记,主要内容是跟着书在一步步敲代码和学习完善代码、修改bug,故有和书上完全一致的内容,其中加入个人理解和备注。菜鸟开坑,若有不足之处,欢迎偶然路过的大佬们指正。

0X01 基础知识

变量
python是一种解释型语言,解释器会在运行时处理并执行代码。
当我们声明变量时,python会自动为变量保留内存空间,python解释器可以决定变量的类型和为变量保留多少内存空间。

>>> port=21                             # An insteger
>>> type(port)
<class 'int'>
>>> banner="FreeFloat FTP Server"       # A string
>>> type(banner)
<class 'str'>
>>> portlist=[21,22,80,8080,8081]       # A list
>>> type(portlist)
<class 'list'>
>>> portOpen=True                       # A boolean
>>> type(portOpen)
<class 'bool'>
>>> print "[+]Checking for "+banner+"on port "+str(port)
SyntaxError: invalid syntax
>>> print("[+]Checking for "+banner+"on port "+str(port))
[+]Checking for FreeFloat FTP Serveron port 21      ###

字符串
字符串的处理:
upper() 将字符串转换成大写
lower() 将字符串转换成小写
repalce(old,new) 用new子串取代old字串
find() 返回子串在字符串中第一次出现时的偏移量

>>> banner="freefloat ftp server"
>>> print(banner.upper())             #upper()
FREEFLOAT FTP SERVER
>>> print(banner)
freefloat ftp server
>>> BANNER="FREEFLOAT FTP SERVER"
>>> print(BANNER.lower())             #lower()
freefloat ftp server
>>> print(BANNER)
FREEFLOAT FTP SERVER
>>> print(banner.replace('freefloat','oldmoon'))            #replace()
oldmoon ftp server
>>> print(banner.find('ftp'))         #find()  ?存疑
10
>>> print(banner.find('f'))
0
>>> print(banner.find('t'))
8
>>> print(banner.find('p'))
12

列表(List)
Python中的list数据结构是在python种存储对象数组的极好方式,如下例,通过调用append()方法向其中添加元素,正式创建list之后可对元素进行排序(sort())和打印,也可指定某元素的索引(index())同时可删除指定的元素(remove())。

>>> portlist=[]
>>> portlist.append(21)          # append() 添加元素
>>> portlist.append(22)
>>> portlist.append(80)
>>> portlist.append(8080)
>>> portlist.append(443)
>>> print(portlist)
[21, 22, 80, 8080, 443]
>>> print(portlist.sort())       #sort() 排序
None
>>> portlist.sort()
>>> print(portlist)
[21, 22, 80, 443, 8080]
>>> pos=portlist.index(443)      #index() 索引
>>> print(str(pos))
3
>>> portlist.remove(80)          #remove() 删除元素
>>> print(portlist)
[21, 22, 443, 8080]
>>> num=len(portlist)            #len() 计数
>>> print(str(num))
4

词典
词典由n对键(key)和值的项(item)组成。
创建词典时,每个键和他的值以冒号分隔(key:item)
应用:创建一个词典,在查找关键字时,可返回相应的键值,达到快速查询的目的。

>>> service={'ftp':21,'ssh':22,'smtp':25,'http':80}
>>> service.keys()   #返回键(key)
dict_keys(['ftp', 'ssh', 'smtp', 'http'])
>>> service.items()   #返回所有
dict_items([('ftp', 21), ('ssh', 22), ('smtp', 25), ('http', 80)])
>>> service['ssh']   #返回键对应的值(可用于查询)
22
>>> service.has_key('ftp')   ###
Traceback (most recent call last):File "<pyshell#43>", line 1, in <module>service.has_key('ftp')
AttributeError: 'dict' object has no attribute 'has_key'
>>> 'ftp' in service   #判断是否有此键值
True

网络
socket模块提供一个用Python进行网络连接的库。
下示抓取banner脚本:连接上指定的IP和TCP端口,并将banner打印出来。

>>> import socket   #加载socket模块
>>> socket.setdefaulttimeout(2)   #设置超时时长
>>> s=socket.socket()   #实例化socket类新变量 (?)
>>> s.connect("192.168.22.119",21)   #连接connect("ip",port)
>>>ans=s.recv(1024)   #从套接字中取出1024B数据
>>>print ans

条件选择语句
下示抓取banner脚本:将服务器响应结果与一些已知漏洞的FTP服务器版本的banner进行比较。这样就能够知道某个特定的服务器中是否存在可以攻击的漏洞。

if ("freefloat ftp server (version 1.00)" in ans):print("[+]111freefloat ftp is vulnerable.")
elif("3com 3cdaemon ftp server (version 2.00)" in ans):print("[+]222freefloat ftp is vulnerzble")
else:print("[-]ftp server is not vulnerable")

(抄书有点蠢,直接上修改好后的完善脚本,下示模块略,详情见书)
异常处理
try/expect()
函数
定义函数 def()
函数从主函数main()开始,定义函数内对变量的任何更改都会影响它们在主调函数中的值。
迭代
for()
文件输入/输出
cat()
open(“file”,‘r’) #只读模式
sys模块
os模块

Python绝技 第一章 入门相关推荐

  1. Python绝技第一章 入门 python3实现密码破解

    前言 对我而言,武术的非凡之处在于它的简单.简单的方法也是正确的方法,同时武术也没有什么特别之处.越接近武术的真谛,招式表现上浪费越少 简介 python 绝技 第一章是python入门语法,两个需要 ...

  2. 【李刚-21天通关Python】第一章:Python入门与字符串

    [李刚-21天通关Python]第一章:Python入门与字符串 第一章:Python入门与字符串 数据类型 字符串 运算符 实操:简易计算器 & 进制转换 章节分篇链接: [李刚-21天通关 ...

  3. 《HeadFirst Python》第一章学习笔记

    对于Python初学者来说,舍得强烈推荐从<HeadFirst Python>开始读起,这本书当真做到了深入浅出,HeadFirst系列,本身亦是品质的保证.这本书舍得已在<Pyth ...

  4. .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划

    写在前面 千呼万唤始出来,首先,请允许我长吸一口气!真没想到一份来自28岁老程序员的自白 这篇文章会这么火,更没想到的是张善友队长的公众号居然也转载了这篇文章,这就导致两天的时间就有两百多位读者朋友加 ...

  5. python 机器学习第一章

    机器学习是一门能够发掘数据价值的算法和应用,是计算机科学中最激动人心的一个领域之一. 接下来的时间,开始学习吧! python机器学习第一章 1.机器学习方法分为三类:监督学习,无监督学习,强化学习. ...

  6. Python Cookbook --第一章:数据结构和算法(1)

    问题1:现在有一个包含N个元素的元组或者是序列,怎样将它里面的值解压后同时赋值给N个变量? >>> p = (4,5) >>> x,y = p >>&g ...

  7. (Raytracing)光线追踪技术 - 第一章 – 入门

    (Raytracing)光线追踪技术 - 第一章 – 入门 RAYTRACING TOPICS & TECHNIQUES - PART 1 – INTRODUCTION 原作者:Jacco B ...

  8. python第一章笔记_head first python(第一章)–学习笔记

    head first python(第一章)--学习流程图 1.安装python 这里是用python3的,除了windows之外,linux和macos都自带了,只是版本没有这么新. 举例:cent ...

  9. 廖雪峰python教程——第一章 Python基础

    第一章 Python基础 一.数据类型和变量 Python的数据类型包括整数.浮点数.字符串.布尔值.空值.变量.常量等.其中整数可以表示任意大小的整数:空值是Python里一个特殊的值,用None表 ...

最新文章

  1. 【Linux】一步一步学Linux——info命令(17)
  2. Java 添加、更新和移除PDF超链接
  3. LB Cluster 之一:集群及LVS基础理论详解
  4. 【小安翻唱】Dreams-黑之契约者 双蛋快乐~顺便来拉票咯!
  5. pyqt5搭建的简单的图像处理界面_PyQt5 布局浅析
  6. 力扣1. 两数之和(哈希表,JavaScript)
  7. 如何实现插入数据时自动更新另外一个表的内容
  8. Python实战之多线程编程threading.Thread
  9. 红黑树、B树、B+树各自适用的场景
  10. STM32CAN波特率简易计算
  11. 大专学计算机为什么不好,大专学计算机后悔了是怎么回事 大专计算机专业学校推荐...
  12. python break怎么用_怎么使用Python中的break
  13. 工业交换机的功率和网络管理方法
  14. 程序猿 那些值得收藏的网站
  15. Redis的KEYS命令引起RDS数据库雪崩,RDS发生两次宕机,造成几百万的资金损失
  16. 用互联网思想武装自己---雷军
  17. 实时传输协议:RTP、RTCP、RTSP介绍
  18. matlab怎么停止运行命令,MATLAB如何使用pause函数暂停程序运行
  19. IPCamera监控软件如何支持joystick遥控手柄控制云台
  20. 超宽带(UWB)学习笔记——基于相位的测距方法

热门文章

  1. C++ 箭头- 双冒号:: 点号.操作符区别
  2. 让游戏世界更加真实可信
  3. wifipineapple执行dnsspoof
  4. 文艺青年转行程序员,一路狂奔
  5. canvas仿芝麻信用分画的一个刻度表(可根据分数变色)
  6. 【笔试】美团2020暑期实习生编程题
  7. CarLife开发总结
  8. Android使用Retrofit技术仿微信图片上传,可以选择多张图片拍照上传
  9. 利用swap函数的三种写法
  10. 学计算机电脑能开机就行,为什么我的电脑开机要按F8才行