Skip to content

Richard-Yu-2026/Python_Scanner

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

1 基于Socket的端口扫描

​ 进行端口扫描可以发现网络设备上的开放端口,确定哪些端口是开放的。这些开放的端口可能暴露系统的服务和应用程序,成为潜在的攻击点。了解这些开放端口有助于渗透测试工作者更好地了解网络的安全状况。端口扫描不仅可以识别哪些端口是开放的,还可以识别在这些开放端口上运行的服务或应用程序。这有助于渗透测试工作者了解网络设备的功能和配置情况,从而更好地进行网络管理和安全维护。通过端口扫描,可以识别存在的漏洞和潜在的安全威胁。这些漏洞和威胁可能是由未打补丁的软件、配置错误或恶意软件引起的。通过及时发现这些漏洞和威胁,渗透测试工作者可以采取相应的措施来修补漏洞或防范威胁,提高网络的安全性。

​ 为了提高扫描效率,节省时间采用多线程分任务端口扫描。可用端口为65535个,划分为650多个线程每个扫100个端口。首先要实例化一个socket对象,然后进行connect连接。如果没有抛出异常则该端口可用,否则pass。多线程的核心代码如下:

for i in range(1, 5000, 50):
    threading.Thread(target=socket_port_thread, args=('117.78.44.231', i)).start()

2 基于Scapy的端口扫描

​ 半连接扫描(SYN扫描)是指在源主机和目标主机的三次握手连接过程中,只完成前两次握手,不建立完整的连接。Scapy半连接扫描是基于半连接 S / SA / RA 等标志位来对端口进行判断。如果目标端口开放,则S->SA,如果目标端口未开放,则S->RA。因为Scapy可以构造底层数据包,因此通过修改指定源IP地址,可以实现IP欺骗,进而导致半连接,此类操作也可以用于Flags参数定义上。

3 基于Ping命令的IP扫描

​ 在公网上,不会进行IP扫描,通常是明确目标IP而进行端口扫描。如果要进行内网渗透,则必须要知道有哪些IP地址是存活的,可访问的,进而再进行端口扫描。IP地址工作在IP层,ICMP,还有ARP协议也存在IP信息。先使用 ping 命令进行IP探测,但是此扫描方式存在Bug,一旦防火墙禁止ICMP,那么扫描结果失效。这里使用到了系统方法popen()这个方法和system()方法类似,唯一的不同是popen()不产生回显,因此需要一个变量来接收。也正因为如此,popen()具有很好的隐蔽性。在进行ping命令的时候,如果目标主机可以ping通,那么会产生TTL=的特征,因此判断目标主机是否存活的策略便是使用一个if判断查看回显是否带有TTL=的特征。

​ 为了提高PIng命令扫描IP的效率,需要指定相应参数,使只发送一个数据包,数据包的大小位100即可对连通性完成测试。因此系统使用的ping命令为:ping -n 1 -w 100 {ip}

4 基于Scapy的IP扫描

​ 如何使用别的方式,让防火墙不存在封锁的行为呢?通过了解ARP协议,构造的Scapy底层数据包可以避免被防火墙屏蔽。基于Scapy的IP扫描主要涉及使用Scapy库发送和接收网络数据包,以探测和识别网络上的活动设备或主机的IP地址。

​ 首先是构造Scapy数据包,pkg = ARP(psrc=192.168.19.1, pdst=ip).然后使用Scapy终端命令的sr1()函数发送该数据包,并将接收到的信息保存到变量reply中。最后尝试打印reply[ARP].hwsrc字段,打印成功则说明目标IP存活,否则说明目标IP不存在,继续遍历下一个IP。

5 子域名扫描

​ 首先介绍一下系统基于Ping命令的子域名扫描。准备好一份常用子域名字典,然后将其读取到一个列表中。遍历该列表,并将其常用子域名拼接在二级域名前,使用popen()方法ping该组合的域名,如果该域名存在,那么有两种情况,第一种是请求超时,第二种是返回TTL,所以和基于Ping命令的IP扫描类似,通过查看回显文本里是否含有请求超时或者TTL=来判断是否存在该子域名即可。

​ 然后是基于Socket的子域名扫描。基于socket库的DNS解析功能实现扫描,类似的,首先是准备好一份常用子域名字典,然后将其读取到一个列表中。遍历该列表,并将其常用子域名拼接在二级域名前,然后使用socket自带的gethostbyname()方法尝试获取该域名的ip地址,如果获取成功,说明该域名存在,否则报错说明域名不存在。

6 Web站点信息搜集

​ 系统通过调用whois函数来实现对目标域名信息的搜集。虽然早期的whois查询多以命令列接口存在,不过现在可以轻松在网上找到简洁化的web端查询程序。事实上,这些Web查询应用的网页接口仍然是依赖whois协议向服务器发送查询请求。whois不是一个扫描工具,而是一个查询工具。whois通常使用TCP协议43端口,每个域名/IP的whois信息由对应的管理机构保存,因此使用whois协议可以查到与之相关联的信息,比如注册人、注册商和注册日期等。本系统的站点信息搜集主要依赖whois()函数实现,将其功能封装为本系统的一个函数便于调用。

About

使用Python开发扫描器工具,涉及端口扫描、IP扫描、子域名扫描和web信息搜集

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages