您的位置:

python的端口,python 端口映射

本文目录一览:

python 查看端口是否开通

一、常见端口扫描的原理

0、秘密扫描

秘密扫描是一种不被审计工具所检测的扫描技术。

它通常用于在通过普通的防火墙或路由器的筛选(filtering)时隐藏自己。

秘密扫描能躲避IDS、防火墙、包过滤器和日志审计,从而获取目标端口的开放或关闭的信息。由于没有包含TCP 3次握手协议的任何部分,所以无法被记录下来,比半连接扫描更为隐蔽。

但是这种扫描的缺点是扫描结果的不可靠性会增加,而且扫描主机也需要自己构造IP包。现有的秘密扫描有TCP FIN扫描、TCP ACK扫描、NULL扫描、XMAS扫描和SYN/ACK扫描等。

1、Connect()扫描

此扫描试图与每一个TCP端口进行“三次握手”通信。如果能够成功建立接连,则证明端口开发,否则为关闭。准确度很高,但是最容易被防火墙和IDS检测到,并且在目标主机的日志中会记录大量的连接请求以及错误信息。

TCP connect端口扫描服务端与客户端建立连接成功(目标端口开放)的过程:

① Client端发送SYN;

② Server端返回SYN/ACK,表明端口开放;

③ Client端返回ACK,表明连接已建立;

④ Client端主动断开连接。

建立连接成功(目标端口开放)

TCP connect端口扫描服务端与客户端未建立连接成功(目标端口关闭)过程:

① Client端发送SYN;

② Server端返回RST/ACK,表明端口未开放。

优点:实现简单,对操作者的权限没有严格要求(有些类型的端口扫描需要操作者具有root权限),系统中的任何用户都有权力使用这个调用,而且如果想要得到从目标端口返回banners信息,也只能采用这一方法。

另一优点是扫描速度快。如果对每个目标端口以线性的方式,使用单独的connect()调用,可以通过同时打开多个套接字,从而加速扫描。

缺点:是会在目标主机的日志记录中留下痕迹,易被发现,并且数据包会被过滤掉。目标主机的logs文件会显示一连串的连接和连接出错的服务信息,并且能很快地使它关闭。

2、SYN扫描

扫描器向目标主机的一个端口发送请求连接的SYN包,扫描器在收到SYN/ACK后,不是发送的ACK应答而是发送RST包请求断开连接。这样,三次握手就没有完成,无法建立正常的TCP连接,因此,这次扫描就不会被记录到系统日志中。这种扫描技术一般不会在目标主机上留下扫描痕迹。但是,这种扫描需要有root权限。

端口开放:1、Client发送SYN 2、Server端发送SYN/ACK 3、Client发送RST断开(只需要前两步就可以判断端口开放)

端口关闭:1、Client发送SYN 2、Server端回复RST(表示端口关闭)

优点:SYN扫描要比TCP Connect()扫描隐蔽一些,SYN仅仅需要发送初始的SYN数据包给目标主机,如果端口开放,则相应SYN-ACK数据包;如果关闭,则响应RST数据包;

3、NULL扫描

如何用python方法检测UDP端口

如何用python方法检测UDP端口,首先要了解什么是UDP端口及作用。个人理解是:UDP端口是含有网络服务必须的源端口和目的端口信息,用以建立和实现网络传输服务。

至于如何用python方法检测UDP端口呢?参考下边这段网友提供的代码吧。

socket、threading、time、Queue这些是要用到的python方法模块。

import socket

import threading

import time

import struct

import Queue

 

queue = Queue.Queue()

 

def udp_sender(ip,port):

    try:

        ADDR = (ip,port)

        sock_udp = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

        sock_udp.sendto("abcd...",ADDR)

        sock_udp.close()

    except:

        pass

 

 

def icmp_receiver(ip,port):

    icmp = socket.getprotobyname("icmp")

 

    try:

        sock_icmp = socket.socket(socket.AF_INET, socket.SOCK_RAW, icmp)

 

    except socket.error, (errno, msg):

 

        if errno == 1:

            # Operation not permitted

 

            msg = msg + (

                " - Note that ICMP messages can only be sent from processes"

                " running as root."

            )

            raise socket.error(msg)

        raise # raise the original error

 

    sock_icmp.settimeout(3)

 

    try:

        recPacket,addr = sock_icmp.recvfrom(64)

 

    except:

        queue.put(True)

        return

 

    icmpHeader = recPacket[20:28]

 

    icmpPort = int(recPacket.encode('hex')[100:104],16)

 

    head_type, code, checksum, packetID, sequence = struct.unpack(

            "bbHHh", icmpHeader

    )

    sock_icmp.close()

 

    if code == 3 and icmpPort == port and addr[0] == ip:

        queue.put(False)

    return

 

#

 

def checker_udp(ip,port):

 

    thread_udp = threading.Thread(target=udp_sender,args=(ip,port))

    thread_icmp = threading.Thread(target=icmp_receiver,args=(ip,port))

     

    thread_udp.daemon= True

    thread_icmp.daemon = True

     

    thread_icmp.start()

    time.sleep(0.1)

    thread_udp.start()

     

    thread_icmp.join()

    thread_udp.join()

    return queue.get(False)

 

if __name__ == '__main__':

    import sys

 

    print checker_udp(sys.argv[1],int(sys.argv[2]))

python获取系统下打开的端口

第一个问题没啥,用0作为端口那么就会选择本地没有使用的端口。

第二个要么用python序列化的方法,只要对端用反序列化解释就可以。要么用自定义的,借助于struct的pack/unpack,或者如果跟c通讯,用ctypes定义结构体也可以。看你需要了

python flask怎么指定端口启动

port后面的数字就是端口号,可以修改数字来指定端口启动

以下是代码:

1. from flask import Flask

2. app = Flask(__name__)

3. app.run(port=8888)