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

编程入门 行业动态 更新时间:2024-10-05 05:22:33

[Violent Python for Hackers]<a href=https://www.elefans.com/category/jswz/34/1766763.html style=常用工具收集整理"/>

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

0:常用工具

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

1:Python基础

#导入自己写的module
import sys
sys.path.append("C:/pyqt/chap02") #把我们写的module路径添加到了path路径,这里我们就可以import自己写的module了
#data type 
port=23
banner="hello hacker"
type(port)
type(banner)
banner.upper()
banner.lower()
banner.replace("old","new")
banner.find("hacker")#list 
portlist=[]
portlist.append(22)
portlist.append(80)
print portlist
portlist.sort() #对portlist进行排序 
pos=portlist.index(80)
portlist.remove(443)
print portlist
cnt=len(portlist)#dictionary
services={"ftp":21,"ssh":22,"smtp":25,"http":80}
services.keys() # return list
services.items()  #change to tuple couple
services.has_key("ftp")  #true or false
services["ftp"]  # return value

2:Networking部分

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

3: Python简单异常处理

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

4:函数的使用

import socket
def abc(arg1,arg2):try:socket.setdefaulttimeout(2)xxxreturn except:return 
def main():xxxif __name__=="__main__":main()  

5:IP,Port的扫描

portList=[21,22,25,80,110]
for x in range (1,255):for port in  portList:print "Checkingt 192.168.1"+str(x)+":"+str(port)#文件的行读取
f=open("hello.txt","r")
for line in f.readlines():if line.strip("\n") in banner:  #从文件中读取到的行内容是否有用 print "xxxx"

6:sys,os,系统模块

import sys
if len(sys.argv)==2:filename=sys.argv[1]print "filename"+filenameimport os
if not os.path.isfile(filename)pirnt filename+" does not exist"return 
if not os.access(filename,os.R_OK):  #chmod 000 a.txt  后,就无法accessprint filename+" access denied"return 

7:运行时决定是否生成函数

import sys
if sys.version_info[:2] <(2,4): #小于2.4的版本没有sorted这个函数,那么我们自己写一个,用自己的def sorted(items):xxxxxxreturn items

8:Python异常处理

#运行过程:
#先try,输出 hello ahc,然后运行3/0后报错
#接下来进行except,输出except happened
#接下来程序接着往下走(不会执行else)
for i in dir(a):try:print "hello ahc"3/0except:print "except happened"else:print "run without except"
\
#运行过程:
#输出hello ahc,由于没有异常,所以会运行else,输出run always
try:print "hello ahc"
except:print "except happened"
else:print "run without except"# 下面是一个标准的异常处理过程
try:process()
except IndexError, e:print "Error: %s" % e
except LookupError, e:print "Error: %s" % e

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

import platform
os_type=platform.platform().lower()
if  "windows" in os_type:fontfile=r"C:\Windows\Fonts\timesi.ttf"
else:fontfile="/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Italic.ttf"

10:nmap常用指令

nmamp -sP 192.168.1.1/24   #simple information
sudo namp -O -PN 192.168.1.1/24  #detail infromation

11:python socket发送http get请求

#!/usr/bin/env python
# Foundations of Python Network Programming - Chapter 1 - search4.py
import socket
sock = socket.socket()
sock.connect(('maps.google', 80))
sock.sendall('GET /maps/geo?q=207+N.+Defiance+St%2C+Archbold%2C+OH''&output=json&oe=utf8&sensor=false HTTP/1.1\r\n''Host: maps.google:80\r\n''User-Agent: search4.py\r\n''Connection: close\r\n''\r\n')
rawreply = sock.recv(4096)
print rawreply

12:socket编程要求点

import socket
创建sock对象
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #使用ipv4,使用udp协议server:创建socks.bind(("ip",port))        #绑定地址 ip是0.0.0.0时,是监听全网,ip是127.0.0.1时,只监听内网data,address=s.recvfrom()  #监听消息 在此block s.sendto("msg",address)    #利用上面的地址(ip,port),来发送msgclient:创建socks.sendto("msg",address)  #操作系统会根据需要,随机分配portdata,addr=s.recv(MAX)    #这里得到的addr就是上面sendto使用的地址(ip,port)

13:socket编程处理服务器端丢包问题

import socket
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.connect((hostname,port))
delay=0.1
while True:s.send("this is another message")s.settimeout(delay)

14:使用socket发送二进制原始数据(DNS协议的研究)

import socket
data="8d890100000100000000000005626169647503636f6d0000010001"
rawdata=bytes.fromhex(data) # dns raw data to get baidu ip
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
DNSserver="202.114.0.242"
s.connect((DNSserver,53))
s.send(rawdata)  #这里直接发送的是16进制的数据   
recvData=s.recv(266) #得到的数据也是最原始的16进制数据,需要阅读DNS协议的格式,然后对数据进行解包
print(recvData)

15:使用下面程序研究两个主机之间UDP包能传送的最大数据量是多少

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

#client
import IN,socket,sys
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
MAX=65535
PORT =1060
s.connect(("192.168.1.1",PORT))
s.setsockopt(socket.IPPROTO_IP,IN.IP_MTU_DISCOVER,IN.IP_PMTUDISC_DO)
try:s.send("#"*2500)
except socket.error:print "message did not make it"option=getattr(IN,"IP_MTU",14)print "MTU:",s.getsockopt(socket.IPPROTO_IP,option)
else:print "the big message was sent! Your network supports really big packet"

16:socket的一些属性的设置和得到

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

17:如何发送UDP广播包 (broadcast packet)

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

###client:
import socket
port=1080
broadcastip="192.168.191.255" #mask =255.255.255.0 network addr=192.168.191.0
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#s.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1)
print ("sending message to %s:%s" %(broadcastip,port))
s.sendto("this is a broadcast message",(broadcastip,port))###server:
import socketdef getLocalIPandHeader(): #得到本机ip地址的函数"""return localIP and IPhead like this :192.168.1.11  , 192.168.1."""s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)s.connect(('baidu', 0))ip=s.getsockname()[0]lastdotpos=ip.rfind(".")iphead=ip[:lastdotpos+1]return ip,ipheadport=1080
bindip,iphead=getLocalIPandHeader()s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#s.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1)
s.bind((bindip,port))
while True:data,addr=s.recvfrom(200)pmsg="i got message from %s say: %s" %(addr,data)print(pmsg)

18:关于文件路径的操作

#__file__ 这个变量中保存了该程序的文件名
abspath=os.path.abspath(__file__)    # a.py ---> /home/gaoy/pyweb/a.py
current_dir=os.path.dirname(abspath) #/home/gaoy/pyweb/a.py --->/home/gaoy/pyweb

19:python装饰器的运行过程

def skin(func):print "in skin"def run():print "in run"func()print "after func"return run@skin
def myprint():print "in my print function"myprint()#运行结果如下 :
==========================
in skin
in run
in my print function
after func
==========================
#如上myprint()函数被skin装饰当我们调用myprint()函数时,发生了什么?如下:
首先skin(myrint())函数会被调用,所以会打印出 "in skin"字符串
由于run中函数是在skin函数中定义的并没有调用,所以不会马上运行,
重点就在这里的return run,return的run函数给谁呢?python解释器会把
这个return的值赋值给myprint,然后调用“新的”myprint()函数简单的说,如果函数被装饰后,按下面方式运行:
1:运行skin(myprint)     #decorator(func)
2:运行装饰器内部定义的函数 #run()

更多推荐

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

本文发布于:2024-02-14 12:57:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1763464.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:常用工具   Violent   Python   Hackers

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!