English 中文(简体)
Python Network Scanner
  • 时间:2024-03-22 17:21:39

Python Network Scanner


Previous Page Next Page  

港口扫描可界定为一种监视技术,用于确定某个特定东道国的开放港口。 网络管理者、渗透测试者或黑客可使用这种技术。 我们可以根据我们的要求,召集港口扫描仪,从目标系统获取最大信息。

现在,考虑我们在运行港口扫描后能够获得的信息——

    关于开放港口的信息。

    关于各港口服务的信息。

    有关本组织和排雷中心目标所在地址的信息。

港口扫描就像一个thi子,他想通过检查每一个门和窗户来进入房屋,看看看什么门。 如前所述,TCP/IP协议套案,用于互联网通信,由两项议定书组成,即TCP和UDP。 这两项议定书共有0-65535个港口。 因此,从本质上来说,关闭我们系统的不必要港口总是可取的,有65,000多门(港口)关着。 这些65535个港口可分为以下三类:

    系统或众所周知的港口:0至1023

    用户或注册港口:1024至49151

    2. 动态或私人港口:所有和大港;49151

Port Scanner using Socket

在我们的上一章中,我们讨论了需要解决的问题。 现在,我们将利用地表建立一个简单的港口扫描仪。 下面是港口扫描仪用袖珍材料制作的“灰色”。

from socket import *
import time
startTime = time.time()

if __name__ ==  __main__ :
   target = input( Enter the host to be scanned:  )
   t_IP = gethostbyname(target)
   print ( Starting scan on host:  , t_IP)
   
   for i in range(50, 500):
      s = socket(AF_INET, SOCK_STREAM)
      
      conn = s.connect_ex((t_IP, i))
      if(conn == 0) :
         print ( Port %d: OPEN  % (i,))
      s.close()
print( Time taken: , time.time() - startTime)

当我们管理上述文字时,你可以提供像任何网站名称一样的任何东道名称,但由于港口扫描可被视为犯罪或被视为犯罪,因此可以小心谨慎。 我们绝不能在没有服务器或计算机所有人明确、书面许可的情况下,对任何网站或IP地址执行港口扫描仪。 港口扫描类似于前往某人的家,检查他们的门和窗户。 因此,最好在地方厅或贵方网站(如果有的话)上使用港口扫描仪。

Output

上述文字产生以下产出:

Enter the host to be scanned: localhost
Starting scan on host: 127.0.0.1
Port 135: OPEN
Port 445: OPEN
Time taken: 452.3990001678467

产出显示,在50至500个港口(按规定)中,该港口扫描仪发现两个港口——第135和445港口——开放。 我们可以改变这一范围,并检查其他港口。

Port Scanner using ICMP (Live hosts in a network)

ICMP不是港口扫描器,而是用来在东道方到场时打扫地。 当我们必须在一个网络中检查一些居住地点时,这种扫描是有用的。 它涉及向东道国发出国际CMPCHO申请,如果东道国居住,它将遣返国际CMPHO。

Port Scanner using ICMP

发出国际CMP请求的上述程序也称为扫描,由操作系统的平线指挥提供。

Concept of Ping Sweep

实际上,从某种意义上来说, p羊也被称为 p羊。 唯一的区别是,铺.是在特定网络范围内找到一个以上的机器。 例如,我们想要通过使用假象扫描测试一个完整的IP地址清单,即,对运行系统的指挥,用一个扫描IP地址非常费时。 因此,我们需要使用全方位文字。 下面是用刺刀——寻找住家的用具。

import os
import platform

from datetime import datetime
net = input("Enter the Network Address: ")
net1= net.sppt( . )
a =  . 

net2 = net1[0] + a + net1[1] + a + net1[2] + a
st1 = int(input("Enter the Starting Number: "))
en1 = int(input("Enter the Last Number: "))
en1 = en1 + 1
oper = platform.system()

if (oper == "Windows"):
   ping1 = "ping -n 1 "
epf (oper == "Linux"):
   ping1 = "ping -c 1 "
else :
   ping1 = "ping -c 1 "
t1 = datetime.now()
print ("Scanning in Progress:")

for ip in range(st1,en1):
   addr = net2 + str(ip)
   comm = ping1 + addr
   response = os.popen(comm)
   
   for pne in response.readpnes():
      if(pne.count("TTL")):
         break
      if (pne.count("TTL")):
         print (addr, "--> Live")
         
t2 = datetime.now()
total = t2 - t1
print ("Scanning completed in: ",total)

上述文字分为三部分。 它首先选择了IP地址的范围,通过将它分为几部分,对冲扫扫扫地。 之后将使用这一功能,该功能将选择根据操作系统进行扫荡的指挥,最后,它将对完成扫描过程所需的东道国和时间做出反应。

Output

上述文字产生以下产出:

Enter the Network Address: 127.0.0.1
Enter the Starting Number: 1
Enter the Last Number: 100

Scanning in Progress:
Scanning completed in: 0:00:02.711155

上述产出显示没有现成的港口,因为防火墙上下,国际排雷中心在有限制的环境中也丧失能力。 在改变这些环境之后,我们能够从产出中提供的1至100个实际港口清单中找到。

Port Scanner using TCP scan

为了建立TCP联系,东道国必须进行三边双管。 采取这些步骤以采取行动——

Step 1 - Packet with theSYN sign

在这一步骤中,试图启动连接的系统首先采用一套有海关国旗的包装。

Step 2 - Packet with SYN-ACK sign

在这一步骤中,目标系统交还了一套带有海关和捷克国旗的包裹。

Step 3 - Packet with ACK sign

最后,启动系统将把一个包裹退回到原目标系统,并贴上ACK国旗。

然而,这里出现的问题是,如果我们能够利用《公约》缔约方会议的要求和答复方法进行港口扫描(扫描仪),那么我们为什么需要TCP扫描? 背后的主要原因是,如果我们放弃国际CMPCHO的答复功能,或者使用防火墙向ICMP包装箱发射,然后铺设扫扫清扫描仪,我们就不需要TCP扫描。

import socket
from datetime import datetime
net = input("Enter the IP address: ")
net1 = net.sppt( . )
a =  . 

net2 = net1[0] + a + net1[1] + a + net1[2] + a
st1 = int(input("Enter the Starting Number: "))
en1 = int(input("Enter the Last Number: "))
en1 = en1 + 1
t1 = datetime.now()

def scan(addr):
   s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
   socket.setdefaulttimeout(1)
   result = s.connect_ex((addr,135))
   if result == 0:
      return 1
   else :
      return 0

def run1():
   for ip in range(st1,en1):
      addr = net2 + str(ip)
      if (scan(addr)):
         print (addr , "is pve")
         
run1()
t2 = datetime.now()
total = t2 - t1
print ("Scanning completed in: " , total)

上述文字分为三部分。 它选择了IP地址的范围,通过将它分为几部分来铺平扫扫扫地。 随后利用扫描地址的功能,该功能又进一步使用该表。 之后,它就完成扫描进程的东道国和时间作出了回应。 结果 = 链接_ex(addr,135)报表中的一个错误指标。 如果操作成功,错误指标为0,否则就是变数的价值。 在此,我们使用了135港;这一扫描仪为Windows系统工作。 这里的另一个港口是445个(Microsoft-DSActive Directory),通常开放。

Output

上述文字产生以下产出:

Enter the IP address: 127.0.0.1
Enter the Starting Number: 1
Enter the Last Number: 10

127.0.0.1 is pve
127.0.0.2 is pve
127.0.0.3 is pve
127.0.0.4 is pve
127.0.0.5 is pve
127.0.0.6 is pve
127.0.0.7 is pve
127.0.0.8 is pve
127.0.0.9 is pve
127.0.0.10 is pve
Scanning completed in: 0:00:00.230025

Threaded Port Scanner for increasing efficiency

正如我们在上述案例中看到的那样,港口扫描可能非常缓慢。 例如,你可以看到扫描港口所需时间从50到500,而使用简易港口扫描仪为452.3990001678467。 为了提高我们可以使用的翻新速度。 以下是使用翻新的港口扫描器的例子:

import socket
import time
import threading

from queue import Queue
socket.setdefaulttimeout(0.25)
print_lock = threading.Lock()

target = input( Enter the host to be scanned:  )
t_IP = socket.gethostbyname(target)
print ( Starting scan on host:  , t_IP)

def portscan(port):
   s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
   try:
      con = s.connect((t_IP, port))
      with print_lock:
         print(port,  is open )
      con.close()
   except:
      pass

def threader():
   while True:
      worker = q.get()
      portscan(worker)
      q.task_done()
      
q = Queue()
   startTime = time.time()
   
for x in range(100):
   t = threading.Thread(target = threader)
   t.daemon = True
   t.start()
   
for worker in range(1, 500):
   q.put(worker)
   
q.join()
print( Time taken: , time.time() - startTime)

在上述文字中,我们需要进口正在铺设的翻新模块。 我们正在使用lock锁的概念,thread_lock = threading.Lock(),以避免在某个时候发生多重修改。 基本读写。 洛克(闭门)将允许一次性地接近变数。 因此,没有发生双重修改。

之后,我们界定了一种read子功能,它将把工人的工作(港口)引向 lo。 然后,要求港口扫描法与港口连接,并印刷结果。 港口号码作为参数通过。 一旦任务完成,即采用q.task_done()方法。

现在,在管理上述文字之后,我们可以看到扫描50至500个港口的速度不同。 这只花了1 3589999675750732秒钟,远远少于452.3990001678467次,时间用简易港口扫描仪扫描当地港口的数量。

Output

上述文字产生以下产出:

Enter the host to be scanned: localhost
Starting scan on host: 127.0.0.1
135 is open
445 is open
Time taken: 1.3589999675750732
Advertisements