python 查看端口是不是开通

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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扫描
参考技术A 1. 可以调用系统命令netstat
比如说22端口,查看如下有无返回
netstat -lnt | awk '$6 == "LISTEN" && $4 ~ ":2"'
2. 用socket module, 例如
import socket;sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)result = sock.connect_ex(('你的ip',22))if result == 0: print "Port is open"else: print "Port is not open"
参考技术B 可能是对filter的返回规则不熟悉造成的

它返回的是,筛选满足条件为True的实际变量值的迭代器,而不是True或False这两个布尔值。

注意:py2.7返回的是list列表,py3.X返回的是迭代器

这个函数的两个参数,需要解释一下
第一个参数,要求是一个函数,比如你这个自定义的带变量参数的函数prime

第二个参数,是作为你这个自定义函数的变量输入的序列或迭代器,比如你的这个range(1,100)

其实你如果想要返回布尔值
可能根本用不到filter这个函数

应该只需要把下面的列表生成器改为:

L = [ prime(i) for i in range(1,100) ]

即可实现你想要的效果

最后建议同时关注map函数

map用法与其类似

而且py2和py3返回规则也不一样
参考技术C import socket
sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sk.settimeout(1)
try:
sk.connect((‘IP地址’,端口号))
print(“ok”)
except Exception:
print(“Failed”)
sk.close()
1. 可以调用系统命令netstat
比如说22端口,查看如下有无返回
netstat -lnt | awk '$6 == "LISTEN" && $4 ~ ":2"'
2. 用socket module, 例如
import socket;sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)result = sock.connect_ex(('你的ip',22))if result == 0: print "Port is open"else: print "Port is not open"或者
def check_servers(self):
logger.debug("Check honeypot servers thread start.")
cmd = "netstat -tlnp"

while (True):
try:
config_data = self.get_config_data()
agentid = config_data["agentid"]
global_par.evt_overtime = int(config_data["evt_overtime"])
global_par.evt_cycle = int(config_data["evt_cycle"])
sleep_time = config_data["heartbeat"]
time.sleep(int(sleep_time))

proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
buff = proc.communicate()
proc.stdout.close()

for server_config in agentid:
if server_config["enabled"]:
if server_config["id"] in str(buff):
logger.info("0:1 server running normal.".format(server_config["service"], server_config["id"]))
else:
logger.info("0:1 server running error or is starting.".format(server_config["service"], server_config["id"]))
except Exception as e:
logger.error("Check servers error:", e)

def monitor_honeypot_services(self):
try:
threading.Thread(target=self.check_servers).start()
except Exception as e:
logger.error("Monitor thread error:0".format(e))

self.monitor_honeypot_services()
参考技术D 1. 可以调用系统命令netstat
比如说22端口,查看如下有无返回
netstat -lnt | awk '$6 == "LISTEN" && $4 ~ ":2"'
2. 用socket module, 例如
import socket;sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)result = sock.connect_ex(('你的ip',22))if result == 0: print "Port is open"else: print "Port is not open"本回答被提问者和网友采纳

IBM was调试端口开通演示,was服务重启端口号查看方法

IBM was中间件调试端口开通实例演示

[ 推荐文章 ]
一篇文章快速掌握 Linux 基本命令

was 中间件调试端口开通与查看

① was 中间件调试端口开通

首先选择要开通调试端口的服务,进入。

在配置里选择进程定义。

选择 Java 虚拟机

勾选调试方式,添加调试端口,再点击应用就设置完成了。

② was 服务重启

重启服务后调试端口生效,先停止服务再启动即可。

③ was 服务端口号查看方法

进入服务内的端口属性可以查看服务端口号。

喜欢的点个赞❤吧!

以上是关于python 查看端口是不是开通的主要内容,如果未能解决你的问题,请参考以下文章

测试服务器本机8080端口是不是开通的 命令

如何开通linux机器的对外访问端口

Linux7以上系统防火墙开通端口的方法

怎么查看开放的端口

linux服务器80端口已经开启并且能连接80端口,但是不能访问服务器网页是啥原因

局域网如何开通开放https,即443端口。