如何实现网络端口扫描功能?python代码如何实现网络端口扫描功能?

有的小伙伴会很疑惑什么是端口扫描呢 , 端口扫描呢可以用来标记/找到目标主机或当前设备开启的服务/端口 , 可以理解为一个后台通信/入侵的通道 , 意思端口的开放就意味着开启了某个服务 , 有很多病毒也是通过入侵端口对主机进行攻击的 , 有时候人们随着服务的启动病毒会同时运行 , 所以定期进行端口扫描一是避免非必要的端口开启会遭到攻击 , 二是避免端口浪费 , 长期占用在后台通信的问题 。下面一起来看看这篇文章吧 。

如何实现网络端口扫描功能?python代码如何实现网络端口扫描功能?

文章插图
端口扫描其实就是发送探测报文 , 侦察当前的端口状态 , 并记录分析此端口的响应报文判断端口是否启用 , 通常分为UDP和TCP两种端口进行扫描 。举个例子:
from socket import *def connetScan(gToHost,gToPort):             try:        connetSkt=socket(AF_INET,SOCK_STREAM)       #建立TCP连接        connetSkt.connect((gToHost,gToPort))    #如果无连接 , 则会出错 , 进入except        connetSkt.send('ViolentPython\r\n'.encode())     #向端口发送数据        results=connetSkt.recv(100)             #如果端口是开放的 , 则记录返回的消息        print('[+]%d/tcp open' %gToPort)        print('[+] '+str(results))        connetSkt.close()    except:        print('[-]%d/tcp closed' %gToPort)def portScan(gToHost,gToPorts):    try:        gToIP=gethosttoname(gToHost)    except:        print('[-] Cannot resolve %s : Unknown host'%gToHost)        return    try:        gToName=gethosttoaddr(gToIP)        print('\n[+] Scan Results for:'+gToName[0])    except:        print('\n[+] Scan Results for:' + gToIP)        setdefulttimeout(1)        for gToPort in gToPorts:            print('Scanning port '+gToPort)            connetScan(gToHost,int(gToPort))if __name__ == '__main__':    gToHost='192.168.0.28'            #扫描的目标主机ip    gToPorts=['20','21',’82’,'81']      #需要扫描的端口号序列    portScan(gToHost,gToPorts)运行结果:
[+] Scan Results for:192.168.0.28Scanning port 20[-]20/tcp closedScanning port 21[-]21/tcp closed[+] b’SSh-2.0-xxxxxxxx\nProtocol mismatch.c\n’Scanning port 81[-]81/tcp closedScanning port 80[-]80/tcp closed上面的代码中有很多参数 , 不明白的可以复制到python环境中区试试 , 按住Ctrl+鼠标单击 , 选择某个参数会显示蓝色链接样式的下划线 , 点击即可进入相关源代码查看相关释义哦 。

推荐阅读