• 第8章:网络


    1.列出网络上所有活跃的主机

    1).使用Python判断主机是否活跃

    import subprocess
    import threading
    
    def is_reacheable(ip):
        if subprocess.call(["ping", "-c", "10", ip]):
            print("{0} is alive".format(ip))
        else:
            print("{0} is unreacheable".format(ip))
    
    def main():
        with open('ips.txt') as f:
            lines = f.readlines()
            threads = []
            for line in lines:
                thr = threading.Thread(target=is_reacheable, args=(line,))
                thr.start()
                threads.append(thr)
    
            for thr in threads:
                thr.join()
    
    if __name__ == '__main__':
        main()

    2).使用生产者消费者模型减少线程的数量

    import subprocess
    import threading
    from Queue import Queue
    from Queue import Empty
    
    def call_ping(ip):
        if subprocess.call(["ping", "-c", "10", ip]):
            print("{0} is alive".format(ip))
        else:
            print("{0} is unreacheable".format(ip))
    
    def is_reacheable(q):
        try:
            while True:
                ip = q.get_nowait()
                call_ping(ip)
        except Empty:
            pass
    
    def main():
        q = Queue()
        with open('ips.txt') as f:
            for line in f:
                q.put(line)
    
            threads = []
            for i in range(10):
                thr = threading.Thread(target=is_reacheable, args=(q,))
                thr.start()
                threads.append(thr)
    
            for thr in threads:
                thr.join()
    
    if __name__ == '__main__':
        main()

    2.端口扫描

    1).使用Python编写端口扫描器

    使用简单的socket接口编写一个端口扫描器
    from socket import *
    
    def conn_scan(host, port):
        conn = socket(AF_INET, SOCK_STREAM)
        try:
            conn.connect((host, port))
            print(host, port, ' is available')
        except Exception as e:
            print(host, port, ' is not available')
        finally:
            conn.close()
    
    def main():
        host = "192.168.147.135"
        for port in range(3000,4000):
            conn_scan(host, port)
    
    if __name__ == '__main__':
        main()
    使用telnet形式
    import telnetlib
    
    def conn_scan(host, port):
        t = telnetlib.Telnet()
        try:
            t.open(host, port, timeout=1)
            print(host, port, ' is available')
        except Exception as e:
            print(host, port, ' is not available')
        finally:
            t.close()
    
    def main():
        host = "192.168.147.135"
        for port in range(3000,4000):
            conn_scan(host, port)
    
    if __name__ == '__main__':
        main()

    2).使用nmap扫描端口

    主机发现:
    nmap -sP 192.168.147.*
    端口扫描:
    nmap 192.168.147.135
    版本侦测:
    nmap -sV 192.168.147.135
    操作系统检测:
    nmap -sO 192.168.147.135

    3).使用python-nmap进行端口扫描

    Python-nmap是对nmap的Python封装
    pip install python-nmap
    import nmap
    nm = nmap.PortScanner()
    nm.scan('192.168.147.135','22-5000')

    3.使用IPy进行IP地址管理

        IPy模块是一个处理IP地址的模块

        pip install ipy

    4.使用dnspython解析DNS

        dnspython是Python实现的一个DNS工具集

        pip install dnspython

    5.网络嗅探器Scapy

    1).Scapy简介与安装

        Scapy是一个Python语言编写的工具,使用Scapy可以发送、嗅探、剖析和伪造网络数据报

        pip install scapy

    2).Scapy的基本使用

    ls()显示Scapy支持的所有协议
    lsc()列出Scapy支持的所有命令
    conf显示所有的配置信息
    help(cmd)显示某一命令的使用帮助等
  • 相关阅读:
    Yii2——MYSQL操作
    Git之路——Git的使用
    python之路——爬虫实例
    PHP之路——验证码实现
    PHP之路——PHPExcel使用
    PHP之路——Apache启动失败查看日志
    pycharm——常用快捷键操作
    python_常用断言assert
    python通过一句话判断闰年的代码
    通过Python实现mysql查询数据库实例
  • 原文地址:https://www.cnblogs.com/allenhu320/p/11353766.html
Copyright © 2020-2023  润新知