资讯专栏INFORMATION COLUMN

[Violent Python for Hackers]常用工具收集整理

xiangchaobin / 2593人阅读

摘要:常用工具后面的三个工具无法安装,原因目前不知,后面用来时再寻找解决方法是一个非常强大的加密解密对于信息的加密和破解是需要经常用到的在下,安装报错后,需要安装一个的软件即可,详细看安装的报错信息在下,发现找不到此发现只在系统下才自带有此模

0:常用工具

</>复制代码

  1. #后面的三个工具无法安装,原因目前不知,后面用来时再寻找解决方法
  2. pip install python-nmap python-bluez bluetooth python obexftp
  3. #pycrypto是一个非常强大的加密解密module,对于信息的加密和破解是需要经常用到的
  4. pip install pycrypto #在windows下,安装报错后,需要安装一个VCForPython27.msi的软件即可,详细看安装的报错信息
  5. #在windows下import crypt,发现找不到此module,发现只在linux系统下Python才自带有此模块
  6. crypt.crypt(word, salt) #这个module只有这一个函数
1:Python基础

</>复制代码

  1. #导入自己写的module
  2. import sys
  3. sys.path.append("C:/pyqt/chap02") #把我们写的module路径添加到了path路径,这里我们就可以import自己写的module

</>复制代码

  1. #data type
  2. port=23
  3. banner="hello hacker"
  4. type(port)
  5. type(banner)
  6. banner.upper()
  7. banner.lower()
  8. banner.replace("old","new")
  9. banner.find("hacker")
  10. #list
  11. portlist=[]
  12. portlist.append(22)
  13. portlist.append(80)
  14. print portlist
  15. portlist.sort() #对portlist进行排序
  16. pos=portlist.index(80)
  17. portlist.remove(443)
  18. print portlist
  19. cnt=len(portlist)
  20. #dictionary
  21. services={"ftp":21,"ssh":22,"smtp":25,"http":80}
  22. services.keys() # return list
  23. services.items() #change to tuple couple
  24. services.has_key("ftp") #true or false
  25. services["ftp"] # return value
2:Networking部分

</>复制代码

  1. import socket
  2. socket.setdefaulttimeout(2) #2秒时长没有收到想要的数据长度,就返回了socket.timeout 异常
  3. s=socket.socket() #创建一个socket对象
  4. s.connect(("8.8.8.8",21))
  5. ans=s.recv(1024) #从服务器接收 1024个数据 ,如果在2秒内,没有接收完,就会返回 socket.timeo9ut异常
3: Python简单异常处理

</>复制代码

  1. try:
  2. 3/0
  3. except:
  4. print "3/0 is illegal"
  5. #下面是除0后,得到的ZeroDivisionError
  6. >>> 3/0
  7. Traceback (most recent call last):
  8. File "", line 1, in
  9. ZeroDivisionError: integer division or modulo by zero
  10. #异常处理可以保证,程序出错后,自动处理错误,程序可以接着运行下
  11. #没有异常处理,程序会由于这些异常直接退出
  12. #查看异常类型:
  13. try:
  14. 15/0
  15. except Exception, e:
  16. print "Error"+str(e)
  17. #socket中使用异常处理
  18. import socket
  19. socket.setdefaulttimeout(2)
  20. s=socket.socket()
  21. try:
  22. s.connect(("8.8.8.8",21)) # 成功后,不会运行except部分
  23. except Exception,e:
  24. print "error"+str(e) # connect失败后,会运行这部分代码
4:函数的使用

</>复制代码

  1. import socket
  2. def abc(arg1,arg2):
  3. try:
  4. socket.setdefaulttimeout(2)
  5. xxx
  6. return
  7. except:
  8. return
  9. def main():
  10. xxx
  11. if __name__=="__main__":
  12. main()
5:IP,Port的扫描

</>复制代码

  1. portList=[21,22,25,80,110]
  2. for x in range (1,255):
  3. for port in portList:
  4. print "Checkingt 192.168.1"+str(x)+":"+str(port)
  5. #文件的行读取
  6. f=open("hello.txt","r")
  7. for line in f.readlines():
  8. if line.strip("
  9. ") in banner: #从文件中读取到的行内容是否有用
  10. print "xxxx"
6:sys,os,系统模块

</>复制代码

  1. import sys
  2. if len(sys.argv)==2:
  3. filename=sys.argv[1]
  4. print "filename"+filename
  5. import os
  6. if not os.path.isfile(filename)
  7. pirnt filename+" does not exist"
  8. return
  9. if not os.access(filename,os.R_OK): #chmod 000 a.txt 后,就无法access
  10. print filename+" access denied"
  11. return
7:运行时决定是否生成函数

</>复制代码

  1. import sys
  2. if sys.version_info[:2] <(2,4): #小于2.4的版本没有sorted这个函数,那么我们自己写一个,用自己的
  3. def sorted(items):
  4. xxx
  5. xxx
  6. return items
8:Python异常处理

</>复制代码

  1. #运行过程:
  2. #先try,输出 hello ahc,然后运行3/0后报错
  3. #接下来进行except,输出except happened
  4. #接下来程序接着往下走(不会执行else)
  5. for i in dir(a):
  6. try:
  7. print "hello ahc"
  8. 3/0
  9. except:
  10. print "except happened"
  11. else:
  12. print "run without except"
  13. #运行过程:
  14. #输出hello ahc,由于没有异常,所以会运行else,输出run always
  15. try:
  16. print "hello ahc"
  17. except:
  18. print "except happened"
  19. else:
  20. print "run without except"
  21. # 下面是一个标准的异常处理过程
  22. try:
  23. process()
  24. except IndexError, e:
  25. print "Error: %s" % e
  26. except LookupError, e:
  27. print "Error: %s" % e

9:根据不同的操作系统,选择采用不同的文件路径表达形式(实用)

</>复制代码

  1. import platform
  2. os_type=platform.platform().lower()
  3. if "windows" in os_type:
  4. fontfile=r"C:WindowsFonts
  5. imesi.ttf"
  6. else:
  7. fontfile="/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Italic.ttf"
10:nmap常用指令

</>复制代码

  1. nmamp -sP 192.168.1.1/24 #simple information
  2. sudo namp -O -PN 192.168.1.1/24 #detail infromation
11:python socket发送http get请求

</>复制代码

  1. #!/usr/bin/env python
  2. # Foundations of Python Network Programming - Chapter 1 - search4.py
  3. import socket
  4. sock = socket.socket()
  5. sock.connect(("maps.google.com", 80))
  6. sock.sendall(
  7. "GET /maps/geo?q=207+N.+Defiance+St%2C+Archbold%2C+OH"
  8. "&output=json&oe=utf8&sensor=false HTTP/1.1
  9. "
  10. "Host: maps.google.com:80
  11. "
  12. "User-Agent: search4.py
  13. "
  14. "Connection: close
  15. "
  16. "
  17. ")
  18. rawreply = sock.recv(4096)
  19. print rawreply
12:socket编程要求点

</>复制代码

  1. import socket
  2. 创建sock对象
  3. s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #使用ipv4,使用udp协议
  4. server:
  5. 创建sock
  6. s.bind(("ip",port)) #绑定地址 ip是0.0.0.0时,是监听全网,ip是127.0.0.1时,只监听内网
  7. data,address=s.recvfrom() #监听消息 在此block
  8. s.sendto("msg",address) #利用上面的地址(ip,port),来发送msg
  9. client:
  10. 创建sock
  11. s.sendto("msg",address) #操作系统会根据需要,随机分配port
  12. data,addr=s.recv(MAX) #这里得到的addr就是上面sendto使用的地址(ip,port)
13:socket编程处理服务器端丢包问题

</>复制代码

  1. import socket
  2. s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
  3. s.connect((hostname,port))
  4. delay=0.1
  5. while True:
  6. s.send("this is another message")
  7. s.settimeout(delay)
14:使用socket发送二进制原始数据(DNS协议的研究)

</>复制代码

  1. import socket
  2. data="8d890100000100000000000005626169647503636f6d0000010001"
  3. rawdata=bytes.fromhex(data) # dns raw data to get baidu ip
  4. s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
  5. DNSserver="202.114.0.242"
  6. s.connect((DNSserver,53))
  7. s.send(rawdata) #这里直接发送的是16进制的数据
  8. recvData=s.recv(266) #得到的数据也是最原始的16进制数据,需要阅读DNS协议的格式,然后对数据进行解包
  9. print(recvData)
15:使用下面程序研究两个主机之间UDP包能传送的最大数据量是多少

一般的udp包能传送的最大数据量为1500bytes

</>复制代码

  1. #client
  2. import IN,socket,sys
  3. s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
  4. MAX=65535
  5. PORT =1060
  6. s.connect(("192.168.1.1",PORT))
  7. s.setsockopt(socket.IPPROTO_IP,IN.IP_MTU_DISCOVER,IN.IP_PMTUDISC_DO)
  8. try:
  9. s.send("#"*2500)
  10. except socket.error:
  11. print "message did not make it"
  12. option=getattr(IN,"IP_MTU",14)
  13. print "MTU:",s.getsockopt(socket.IPPROTO_IP,option)
  14. else:
  15. print "the big message was sent! Your network supports really big packet"
16:socket的一些属性的设置和得到

</>复制代码

  1. s=socket.socket(xx)
  2. s.setsockopt(xxx)
  3. value=s.getsockopt(xx)
  4. #例子,是否允许广播UDP包
  5. value=s.getsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST)
  6. s.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,value)
  7. SO_DONTROUTE:只允许包发送给子网host
  8. SO_TYPE:当把这个参数传递给getsockopt函数时,得到当前socket使用的是tcp or udp
17:如何发送UDP广播包 (broadcast packet)

客户端可以开启广播选项:这样发的广播包其它的机器都能接到
服务器端也可开启接收广播包的选项?才能接收广播包?这个要到后面实验看效果:
不需要进行其它的配置,只需使用使用sendto时,把具体的server ip地址换成广播地址

</>复制代码

  1. ###client:
  2. import socket
  3. port=1080
  4. broadcastip="192.168.191.255" #mask =255.255.255.0 network addr=192.168.191.0
  5. s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
  6. #s.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1)
  7. print ("sending message to %s:%s" %(broadcastip,port))
  8. s.sendto("this is a broadcast message",(broadcastip,port))
  9. ###server:
  10. import socket
  11. def getLocalIPandHeader(): #得到本机ip地址的函数
  12. """
  13. return localIP and IPhead
  14. like this :192.168.1.11 , 192.168.1.
  15. """
  16. s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  17. s.connect(("baidu.com", 0))
  18. ip=s.getsockname()[0]
  19. lastdotpos=ip.rfind(".")
  20. iphead=ip[:lastdotpos+1]
  21. return ip,iphead
  22. port=1080
  23. bindip,iphead=getLocalIPandHeader()
  24. s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
  25. #s.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1)
  26. s.bind((bindip,port))
  27. while True:
  28. data,addr=s.recvfrom(200)
  29. pmsg="i got message from %s say: %s" %(addr,data)
  30. print(pmsg)
18:关于文件路径的操作

</>复制代码

  1. #__file__ 这个变量中保存了该程序的文件名
  2. abspath=os.path.abspath(__file__) # a.py ---> /home/gaoy/pyweb/a.py
  3. current_dir=os.path.dirname(abspath) #/home/gaoy/pyweb/a.py --->/home/gaoy/pyweb
19:python装饰器的运行过程

</>复制代码

  1. def skin(func):
  2. print "in skin"
  3. def run():
  4. print "in run"
  5. func()
  6. print "after func"
  7. return run
  8. @skin
  9. def myprint():
  10. print "in my print function"
  11. myprint()
  12. #运行结果如下 :
  13. ==========================
  14. in skin
  15. in run
  16. in my print function
  17. after func
  18. ==========================
  19. #如上myprint()函数被skin装饰
  20. 当我们调用myprint()函数时,发生了什么?如下:
  21. 首先skin(myrint())函数会被调用,所以会打印出 "in skin"字符串
  22. 由于run中函数是在skin函数中定义的并没有调用,所以不会马上运行,
  23. 重点就在这里的return run,return的run函数给谁呢?python解释器会把
  24. 这个return的值赋值给myprint,然后调用“新的”myprint()函数
  25. 简单的说,如果函数被装饰后,按下面方式运行:
  26. 1:运行skin(myprint) #decorator(func)
  27. 2:运行装饰器内部定义的函数 #run()

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/37892.html

相关文章

  • 努力翻译一篇中文最友好的,Web Audio API的使用相关的文章

    摘要:前言本文翻译自上的利用,这是中的的一个入门教程。原文是英文,但有日本同志翻译的日文版。这是为了提供一个基本的低音増幅效果在这个例子中可以设定过滤器的种类,周波数,甚至的值。如果是过滤器的话,可以提供一个比指定周波数低的低音増幅。 前言 本文翻译自MDN上的《Web Audio APIの利用》,这是HTML5中的Web Audio API的一个入门教程。原文是英文,但有日本同志翻译的日文...

    caikeal 评论0 收藏0

发表评论

0条评论

xiangchaobin

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<