python使用scapy扫描内网IP或端口的方法实现
地址信息在IP层, 可以利用 ICMP 或 ARP 协议数据包探测IP信息.
ICMP协议可以利用ping工具发送数据包, 但是防火墙有可能禁止ICMP, 无法有效探测, 可以考虑使用ARP探测.
利用ICMP协议探测内网IP
def ping_ip(ip_fex): # 扫描范围: 128~254 for i in range(128, 255): ip = f'{ip_fex}.{i}' print(f'\r{ip}', end='') output = os.popen(f'ping -n 1 -w 100 {ip} | findstr TTL=').read() if len(output) > 0: print(f"\n{ip} online") if __name__ == '__main__': ping_ip('192.168.110')
利用ARP协议探测内网IP
def ip_thread(start, ip_fex): for i in range(start, start + 20): ip = f'{ip_fex}.{i}' # 目标ip try: pkg = ARP(psrc=f'{ip_fex}.1', pdst=ip) # 伪造ARP广播 reply = sr1(pkg, timeout=1, verbose=False) # 发送ARP并获取响应包 if reply: print(f'\n{ip}->{reply[ARP].hwsrc}') # 显示MAC地址 else: print(f'\r{ip} ...', end='') except Exception as e: print(e) def ip_scan(ip_fex): # 关闭警告 import logging logging.getLogger("scapy.runtime").setLevel(logging.ERROR) # 端口范围 1~254 for i in range(1, 255, 20): threading.Thread(target=ip_thread, args=(i, ip_fex)).start()
利用TCP协议探测端口
端口信息在TCP层, 可以使用TCP协议数据包探测端口是否开放
伪造 SYN 数据包, 根据响应数据中的标志位 flags 来判断端口是否正常响应.
SYN: 0x002
ACK: 0x010
SYN-ACK: 0x012
def scan_port(ip): for port in range(22, 100): try: pkg = IP(src='192.168.112.123', dst=ip) / TCP(dport=port, flags='S') reply = sr1(pkg, timeout=1, verbose=False) if reply: if reply[TCP].flags == 0x12: # SYN-ACK print(f'port->[{port}]') except Exception as e: print(e)
到此这篇关于python使用scapy扫描内网IP或端口的方法实现的文章就介绍到这了,更多相关python scapy扫描内网IP或端口内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
小白教你PyCharm从下载到安装再到科学使用PyCharm2020最新激活码
这篇文章主要介绍了PyCharm最新版从下载到安装再到科学使用PyCharm2020最新激活码,需要的朋友可以参考下2020-09-09django自定义非主键自增字段类型详解(auto increment field)
这篇文章主要介绍了django自定义非主键自增字段类型详解(auto increment field),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-03-03Python itertools库中product函数使用实例探究
这篇文章主要为大家介绍了Python itertools库中product函数使用实例探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2024-01-01Python使用Webargs实现简化Web应用程序的参数处理
在开发Web应用程序时,参数处理是一个常见的任务,Python的Webargs模块为我们提供了一种简单而强大的方式来处理这些参数,下面我们就来学习一下具体操作吧2024-02-02
最新评论