python进行TCP端口扫描的实现
程序员文章站
2024-02-04 19:16:05
首先我们供给一台主机要进行的步骤就是对其主机端口的扫描,查看其中开放的端口。
我们首先创建一个tcp的全连接的扫描器。我们使用socket来创建连接器。
扫描端...
首先我们供给一台主机要进行的步骤就是对其主机端口的扫描,查看其中开放的端口。
我们首先创建一个tcp的全连接的扫描器。我们使用socket来创建连接器。
扫描端口开放
#测试当前主机和端口是否开放,直接使用socket连接 def connscan(host,port): try: connskt = socket.socket(socket.af_inet, socket.sock_stream) connskt.connect((host,port)) print("tcp open port:" + str(port)) except: print('tcp closed:'+str(port))
def portscan(tgthost, tgtports): try: tgtip = socket.gethostbyname(tgthost) except: print("[-] cannot resolve '%s': unknown host" % tgthost) return try: tgtname = socket.gethostbyaddr(tgtip) print('\n[+] scan results for: ' + tgtname[0]) except: print('\n[+] scan results for: ' + tgtip) socket.setdefaulttimeout(1) for tgtport in tgtports: print('scanning port ' + str(tgtport)) connscan(tgthost, int(tgtport))
portscan('www.baidu.com', [80,443,3389,1433,23,445])
对百度的端口进行扫描
[+] scan results for: 61.135.169.125 scanning port 80 tcp open port:80 scanning port 443 tcp open port:443 scanning port 3389 tcp closed:3389 scanning port 1433 tcp closed:1433 scanning port 23 tcp closed:23 scanning port 445 tcp closed:445
捕获应用标识
为了从捕获我们的目标主机的应用标识,我们必须首先插入额外的验证代码到 connscan函数中。一旦发现开放的端口,我们发送一个字符串数据到这个端 口然后等待响应。收集这些响应并推断可能会得到运行在目标主机端口上的应 用程序的一些信息。
#测试当前主机和端口是否开放,直接使用socket连接 def connscan(host,port): try: connskt = socket.socket(socket.af_inet, socket.sock_stream) connskt.connect((host,port)) connskt.send('python\r\n') results = connskt.recv(100) print("tcp open port:" + str(port)) print('[+] ' + str(results)) except: print('tcp closed:'+str(port)) def portscan(tgthost, tgtports): try: tgtip = socket.gethostbyname(tgthost) except: print("[-] cannot resolve '%s': unknown host" % tgthost) return try: tgtname = socket.gethostbyaddr(tgtip) print('\n[+] scan results for: ' + tgtname[0]) except: print('\n[+] scan results for: ' + tgtip) socket.setdefaulttimeout(1) for tgtport in tgtports: print('scanning port ' + str(tgtport)) connscan(tgthost, int(tgtport))
portscan('www.qq.com', [22,80,443,3389,1433,23,445])
多线程扫描
因为每一个socket都有时间延迟,每一个socket扫描都将会耗时几秒钟,虽 然看起来无足轻重,但是如果我们扫描多个端口和主机延迟时间将迅速增大。 理想情况下,我们希望这些socket按顺序扫描。引入python线程。线程提供 了一种同时执行的方式。在我们的扫描中利用线程,只需将 portscan()函数的迭代改一下。请注意,我们可以把每一个connscan()函数都 当做是一个线程。在迭代的过程中产生的每一个线程将在同时执行。
for tgtport in tgtports: print('scanning port ' + str(tgtport)) t = threading.thread(target=connscan, args=(tgthost, int(tgtport))) t.start()
使用nmap
import nmap def nmapscan(tgthost, tgtport): nmscan = nmap.portscanner() results = nmscan.scan(tgthost, tgtport) state = results['scan'][tgthost]['tcp'][int(tgtport)]['state'] print(" [*] " + tgthost + " tcp/" + tgtport + " " + state) nmapscan('10.108.x.x','8080')
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: FusionCharts 横坐标标签较长时显示方式 BlogHTML
下一篇: QT多线程的使用
推荐阅读