zoukankan      html  css  js  c++  java
  • python信息收集(四)

        在前三篇中,我们介绍了使用python脚本发现二层、三层的主机设备,接下来我们介绍使用python发现第四层主机。
        在TCP/IP协议中,第四层为传输层,主要使用的通信协议为TCP协议和UDP协议,我们就利用这两个协议来进行目标主机的发现。
        简单说一下TCP协议,TCP协议是一种面向连接的、可靠的,基于字节流的传输层通信协议,它要求通信双方在通信之前必须建立连接,此外,TCP协议可以确保接收方一定会收到发送方所发出的数据。最著名的就是“三次握手"原理了。和“三次握手”分不开的,就是TCP的flag标识位。

    flag标识位

        FIN:断开连接,对应值为1;
        SYN:同步信号,用于发起一个连接,对应值为2;
        RST:重置连接,对应值为4;
        ACK:确认信息,对应值为16;

    三次握手的过程

        1.发送方给接收方发送一个SYN
        2.接收方回给发送方一个SYN和和ACK
        3.发送发给接收方发送一个ACK

    TCP探测原理

        为了探测对方主机是否存活,我们可以直接给接收方发送一个ACK,接收方就会认为是无效确认。从而给我们回复一个RST,只要我们能收到这个RST,我们就可以判断对方的主机是在线的。此外,我们向目标主机发送ACK包,只要目标主机在线,无论端口是否对外开放,都将返回数据。
        附上python脚本

    def host_scan(ip):
        try:
            pkt=IP(dst=ip)/TCP(dport=55555,flags='A')
            result=sr1(pkt,timeout=1,verbose=0)
            if int (result[TCP].flags)==4:
                time.sleep(0.1)
                print ip,"在线"
            return
        except:
            return
    
    def main():
        if len(sys.argv) != 2:
            print "使用方法: ./hostscan.py 目标网络地址"
            sys.exit()
        address=str(sys.argv[1]).strip()
        prefix=address.split(".")[0]+"."+address.split(".")[1]+"."+address.split(".")[2]+"."
        for i in range(1,255):
            ip=prefix+str(i)
            t=Thread(target=host_scan,args=(ip,))
            t.start()
    if __name__=='__main__':
        main()
    
    

        上述代码实现的方法,就是构造一个ACK包发给目标主机,只要我们接收到的数值为4(即为RST包),则可以判断目标主机在线。

    UDP探测原理

        我们使用UDP探测的原理是:向目标主机的一个没有开放的端口发送数据,目标主机会返回一个端口不可达的ICMP消息,只要我们接收到了这个ICMP消息,我们就可以发现目标主机是否在线了。此外,如果目标主机不在线,或者目标主机在线但是端口是开放的状态,那我们发送过去的UDP探测数据包就不会收到响应了。
        附上UDP主要功能部分:

    def host_scan(ip):
        try:
            pkt=IP(dst=ip)/UDP(dport=55555)
            result=sr1(pkt,timeout=1,verbous=0)
            if int(result[IP].proto)==1:
                time.sleep(0,1)
                print ip,"在线"
            return
        except:
            return
    
  • 相关阅读:
    算法笔记 --- Selection Sort
    算法笔记 --- Radix Sort
    算法笔记 --- Quick Sort
    算法笔记 --- Merge Sort
    算法笔记 --- Insertion Sort
    算法笔记 --- Heap Sort
    算法笔记 --- Counting Sort
    算法笔记 --- Bubble Sort
    算法笔记 --- Tree Travers
    javaweb_JDBC
  • 原文地址:https://www.cnblogs.com/ricardojxu/p/12792514.html
Copyright © 2011-2022 走看看