python使用socket实现多线程端口扫描

末蓝、 2022-06-15 10:48 543阅读 0赞

使用socket主要是判断是否端口能否联通
socket<<详情参考>>

1.socket.connect() 检测端口,若端口不能联通,则会抛出异常,若无异常,则端口存活,使用try-except异常捕获处理,进而进行端口扫描

这里将使用100个线程,每个端口连接都要检查是否超过65535

  1. #coding=utf8
  2. import socket
  3. import threading
  4. def scan(host,cport):
  5. for x in range(660):
  6. p=x+660*cport
  7. try:
  8. if p < 65535:
  9. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  10. s.connect((host, p))
  11. s.settimeout(0.1)
  12. print "local open port : %d"%p
  13. s.close()
  14. else :
  15. break
  16. except Exception:
  17. pass
  18. list = []
  19. for i in range(100):
  20. t = threading.Thread(target=scan,args=('localhost',i,))
  21. list.append(t)
  22. t.start()
  23. for threadinglist in list:
  24. threadinglist.join()

输出:

  1. local open port : 22
  2. local open port : 111
  3. local open port : 34172
  4. local open port : 49716
  5. local open port : 51078

2.socket.connect_ex() 若联通则返回为0,否则返回为非0
依据connect_ex返回值判断端口是否存活

  1. import socket
  2. import threading
  3. from Queue import Queue
  4. def scan(port):
  5. s = socket.socket()
  6. s.settimeout(1)
  7. if s.connect_ex(('localhost', port)) == 0:
  8. print "local open port : %d"%port
  9. s.close()
  10. def worker():
  11. while not q.empty():
  12. port = q.get()
  13. try:
  14. scan(port)
  15. finally:
  16. q.task_done()
  17. if __name__ == '__main__':
  18. q = Queue()
  19. map(q.put,xrange(1,65535))
  20. threads = [threading.Thread(target=worker) for i in xrange(100)]
  21. map(lambda x:x.start(),threads)
  22. q.join()

输出:

  1. local open port : 22
  2. local open port : 25
  3. local open port : 111
  4. local open port : 631
  5. local open port : 35156
  6. local open port : 38929
  7. local open port : 51078

发表评论

表情:
评论列表 (有 0 条评论,543人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Python扫描端口

    通过python代码对局域网内某IP开启的端口进行扫描 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10

    相关 python端口扫描

    端口扫描 探测 主机的开放端口。常用 确认安全策略 就是向一定范围内的 主机:端口 发送请求,以此确定可使用的端口。 主要用于某个服务的可用性,也是一些网络攻击者获取目标