python socket监听端口_python 用socket模块实现检测端口和检测web服务

2023-11-05

以下程序均来自《Python.UNIX和Linux系统管理指南》

检测端口

check_tcp_port.py

#!/usr/bin/env python

import socket

import re

import sys

def check_server(address, port):

s = socket.socket()

print "Attempting to connect to %s on port %s" %(address, port)

try:

s.connect((address, port))

print "Connected to %s on port %s" % (address, port)

return True

except socket.error, e:

print "Connection to %s on port %s failed: %s" % (address, port, e)

return False

if __name__ == '__main__':

from optparse import OptionParser

parser = OptionParser()

parser.add_option("-a", "--address", dest="address", default="localhost", help="ADDRESS for server", metavar='ADDRESS')

parser.add_option("-p", "--port", dest="port", type="int", default=80, help="PORT for server", metavar="PORT")

(options, args) = parser.parse_args()

print 'options: %s, args: %s' %(options, args)

check = check_server(options.address, options.port)

print 'check_server returned %s' % check

sys.exit(not check)

运行结果:

端口在监听

[root@centos python]# python check_tcp_port.py -a 192.168.137.2 -p 22

options: {'port': 22, 'address': '192.168.137.2'}, args: []

Attempting to connect to 192.168.137.2 on port 22

Connected to 192.168.137.2 on port 22

check_server returned True

端口不在监听

[root@centos python]# python check_tcp_port.py -a 192.168.137.2 -p 36

options: {'port': 36, 'address': '192.168.137.2'}, args: []

Attempting to connect to 192.168.137.2 on port 36

Connection to 192.168.137.2 on port 36 failed: [Errno 111] Connection refused

check_server returned False

检测web服务

check_web.py

#!/usr/bin/env python

import socket

import re

import sys

def check_webserver(address, port, resource):

if not resource.startswith('/'):

resource = '/' + resource

request_string = "GET %s HTTP/1.1\r\nHost: %s\r\n\r\n" %(resource, address)

print 'HTTP request:'

print '|||%s|||' % request_string

s = socket.socket()

print "Attempting to connect to %s on port %s" %(address, port)

try:

s.connect((address, port))

print "Connected to %s on port %s" %(address, port)

s.send(request_string)

rsp = s.recv(100)

print 'Received 100 bytes of HTTP response'

print '|||%s|||' % rsp

except socket.error, e:

print "Connection to %s on port %s failed: %s" %(address, port, e)

return False

finally:

print "Closing the connection"

s.close()

lines = rsp.splitlines()

print 'First line of HTTP response: %s' % lines[0]

try:

version, status, message = re.split(r'\s+', lines[0], 2)

print 'Version: %s, Stuats: %s, Message: %s' %(version, status, message)

except ValueError:

print 'Failed to split status line'

return False

if status in ['200', '301']:

print 'Success - status was %s' %status

return True

else:

print 'Staus was %s' %status

return False

if __name__ == '__main__':

from optparse import OptionParser

parser = OptionParser()

parser.add_option("-a", "--address", dest="address", default="localhost", help="ADDRESS for webserver", metavar="ADDRESS")

parser.add_option("-p", "--port", dest="port", type="int", default=80, help="PORT for webserver", metavar="PORT")

parser.add_option("-r", "--resource", dest="resource", default="index.html", help="RESOURCE to check", metavar="RESOURCE")

(options, args) = parser.parse_args()

print 'options: %s, args: %s' %(options, args)

check = check_webserver(options.address, options.port, options.resource)

print 'check_webserver returned %s' % check

sys.exit(not check)

运行结果:

正常

[root@centos python]# python check_web.py -a 192.168.137.2 -p 80 -r index.html

options: {'resource': 'index.html', 'port': 80, 'address': '192.168.137.2'}, args: []

HTTP request:

|||GET /index.html HTTP/1.1

Host: 192.168.137.2

|||

Attempting to connect to 192.168.137.2 on port 80

Connected to 192.168.137.2 on port 80

Received 100 bytes of HTTP response

|||HTTP/1.1 200 OK

Date: Wed, 19 Jun 2013 02:29:31 GMT

Server: Apache/2.2.3 (CentOS)

Last-Modified: |||

Closing the connection

First line of HTTP response: HTTP/1.1 200 OK

Version: HTTP/1.1, Stuats: 200, Message: OK

Success - status was 200

check_webserver returned True

不正常,找不到页面的情况

[root@centos python]# python check_web.py -a 192.168.137.2 -p 80 -r ppp.html

options: {'resource': 'ppp.html', 'port': 80, 'address': '192.168.137.2'}, args: []

HTTP request:

|||GET /ppp.html HTTP/1.1

Host: 192.168.137.2

|||

Attempting to connect to 192.168.137.2 on port 80

Connected to 192.168.137.2 on port 80

Received 100 bytes of HTTP response

|||HTTP/1.1 404 Not Found

Date: Wed, 19 Jun 2013 02:29:41 GMT

Server: Apache/2.2.3 (CentOS)

Content-|||

Closing the connection

First line of HTTP response: HTTP/1.1 404 Not Found

Version: HTTP/1.1, Stuats: 404, Message: Not Found

Staus was 404

check_webserver returned False

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python socket监听端口_python 用socket模块实现检测端口和检测web服务 的相关文章

  • 什么是dns流量?如何监控dns流量

    DNS是重要的基础设施 用于域名服务 在负载均衡 移动IP等方面也有着重要的应用 DNS流量激增对互联网的正常运作的影响 并提出了恶意DNS流量攻击 蜂窝效应概念 什么是DNS流量 监控它的方法有哪些 一起来看看吧 什么是DNS流量 dns
  • 基于互联网的信号传输系统

    参加完电子设计竞赛不知不觉快过去两个月了 今天小刚写一下当时我们这道题的方案 本系统基于互联网的信号传输系统采用STM32F407ZGT6和FPGA Cyclone IV作为主控芯片 对信号进行采样和处理 系统由幅度测量电路 频率测量电路
  • Flask框架之视图高级技巧

    文章目录 4 1 app route与app url rule简介 4 1 1 app route的使用 4 1 2 add url rule的使用 4 2 Flask类视图 4 2 1 标准类视图 4 2 2 基于方法的类视图 4 3 F
  • win10c语言文件不运行,教你解决win10系统无法打开EXE文件的问题

    win10电脑上的程序一般都是exe格式的 鼠标双击一下即可运行 最近 有Win10系统的用户抱怨说竟然打不开Exe的文件 双击好多次了 甚至关机重启还是一样打不开Exe的文件 真是让人感到疑惑 其实 遇到此故障问题不必慌张 大家可以尝试按
  • 拜耳再投4亿元提升在华处方药产能;阿斯利康进博会公布新冠疫苗最新进展

    进博会看点 拜耳围绕 共享健康 消除饥饿 的全新企业愿景 携一系列亮点展品和精彩活动亮相进博会 进博会上 拜耳与北京经济技术开发区签署合作意向书 拜耳今年在公共卫生防疫专区设置独立的展台 并呈现覆盖预防 诊断 缓解及治疗于一体的医疗解决方案
  • vue3+ts 使用qrcode(解决了找不到qrcode类型声明文件问题)

    1 安装 全局安装 npm install g qrcode 安装类型声明 npm i save dev types qrcode 2 在所需处引用 import QRcode from qrcode 3 配合canvas 生成二维码
  • datax 数据写入oracle报错缺失表达式_实战再次升级:流批一体处理百亿级别数据...

    需求背景 该篇内容基于之前写过的一篇 lt gt 上一篇文章其实主要重点是结合logstash的实际应用 近期业务方提出了新的需求 增加了些业务逻辑 同时数据量也成倍增加 要求每日产出指标结果 这里再回顾下上篇的数据情况和技术方案同时对比下
  • word 文档标题样式相同、行距效果不同的解决办法

    先看下图示例 两个标题均采用了标题1的样式 段前 段后0 5行 单倍行距 但展现出的效果有很大差异 修改办法 将鼠标放置在需要修改的标题页 菜单栏点击 布局 gt 点击 页面设置 右下角扩展按钮 gt 点击 文档网络 调整成和第二章一样的行
  • ruoyi 修改主题颜色

    ruoyi 修改主题颜色 找到样式文件 src main resources static css skins css 1 修改顶部右侧导航栏背景颜色 skin yellow navbar background color 4EA3E4 2
  • 通用语言大模型都是人、机、环境系统智能

    通用语言大模型可以被看作是人 机 环境系统智能发展的早期阶段之一 这些模型使用深度学习和自然语言处理等技术 通过对大量数据的学习和训练 能够生成具有语义理解和生成能力的文本回答 在这个系统中 人类作为用户与AI模型进行交互 提供问题或指令
  • Linux异常(中断)处理体系结构

    前言 可以调到总结处先看明白这篇文章要说明的内容 再回到开头看 1 异常 异常 就是可以打断CPU正常运行流程的一些事情 比如 外部中断 未定义的指令 企图修改只读的数据 执行SWI指令 Software Interrupt Instruc
  • 【Unity】鼠标划入划出检测

    Unity 鼠标划入划出检测 在Unity2D中检测鼠标划入划出有专门的内置函数 在使用时要应用相关函数库 继承相关类才行 相关脚本如下 using System Collections using System Collections G
  • bootstrap的portlet组件框框的应用 (点击可伸缩)

    上面用是bootstrap做成的一个经典网站一部分 看右半部分 先分析布局 是这样的 一个大的div 分上下两部分 以一条灰色线区隔开来 上面是说明性文字 和右侧的特殊按钮 如伸缩 刷新 和移除按钮等 下面则是真正的内容部分 把网站的htm
  • pycharm界面怎么自动换行

    pycharm界面怎么自动换行 第一步我们单击桌面上的pycharm图标 第二步找到文件下的设置属性 单击按下就成功开启编辑窗口使用自动换行 还有一个在代码显示界面旁边点击右键 代码框就实现了代码自动换行的
  • 小程序WXML语法

    一 WXML模块语法 数据绑定 1 数据绑定的基本原则 1 在data中定义数据 2 在WXML中使用数据 2 在data中定义页面的数据 在页面对应的 js文件中 把数据定义到data对象中即可 Page data 字符串类型的数据 in
  • Android The number of method references in a .dex file cannot exceed 64K.

    编译项目时报错 The number of method references in a dex file cannot exceed 64K 查阅得知 在Android系统中 一个App的所有代码都在一个Dex文件里面 Dex是一个类似J
  • 如何成为嵌入式软件工程师_成为高效软件工程师的三个关键

    如何成为嵌入式软件工程师 In this one on one episode of the Versioning Show David and Tim look at what it means to be a productive so
  • 微众银行区块链2021年度回顾

    2021年 数字经济不断深化 并有望担当起更为重要的历史使命 同时 十四五 规划纲要明确区块链作为七大数字经济重点产业之一 为数字产业化提供有力技术支撑 助推数字经济转型升级 这一年 微众银行继续坚守联盟链技术路线 以安全可控的开源技术推动
  • odoo(搭建部署资源、教程)

    本地部署odoo16 odoo https www odoo com documentation 14 0 zh CN administration install install html mac os https alanhou org

随机推荐

  • Ubuntu18.04没有WiFi怎么解决(图文详解)

    博主一个月前 2021 6 1 在安装Ubuntu后出现了没有WiFi的问题 参考了很多教程 才成功解决这个问题 中间做了很多无用功 所以在此总结几位大佬的方法 希望对大家有帮助 少走弯路 1 问题描述 登录Ubuntu系统后 在WiFi设
  • mlxtend库:打造自己的机器学习工具箱

    mlxtend库 打造自己的机器学习工具箱 你是否曾经为缺少一个方便 易用的机器学习工具而感到烦恼 mlxtend库或许可以满足你的需求 mlxtend是一个基于Python的开源项目 它提供了许多用于数据预处理 特征选择 分类 聚类等机器
  • Mybatis整合Spring源码分析

    一 整合配置 POM
  • 备份Intellij IDEA配置的两种方式

    转载 https my oschina net vright blog 1558342 这个技巧老早就知道 而且 本就是官方支持的 真正实现 全新安装 开箱即用 这里以Windows系统为例 方式一 通过将配置导出为Jar包的形式 实现备份
  • CPU调度策略&linux 0.11的schedule实现--OS

    CPU调度策略 如何设计调度算法 这个算法应满足 尽快结束任务 周转时间 从任务进入到任务结束 短 用户操作尽快响应 相应时间 从操作发生到响应 短 系统内耗时间少 吞吐量 完成的任务量 总原则 系统专注于任务执行 又能合理调配任务 两种基
  • matlab时域频域信号特征提取资料整合

    1 前言 最近在做一个项目 需要将声纳信号中的特征都提取出来进行分析 资料查到头秃终于整合出来了些东西 记录一下 由于不是专业人员 如果发现任何错误请不要大意的附在评论区 我会及时修改 谢谢 2 思路 思路这段引用自知乎大佬aresmiki
  • 未能加载项目文件。缺少根元素。

    问题 项目无法加载或者无法打开 方法 删除项目的 Debug 和 Release 目录 或者删除 user 配置软件
  • 使用和生成库

    使用和生成库 基本概念 库有动态与静态两种 动态通常用 so为后缀 静态用 a为后缀 例如 libhello so libhello a 为了在同一系统中使用不同版本的库 可以在库文件名后加上版本号为后缀 例如 libhello so 1
  • 【Leetcode】145. 二叉树的后序遍历

    题目描述 给定一个二叉树 返回它的 后序 遍历 题解 递归法 执行用时 0 ms 在所有 Java 提交中击败了100 00 的用户 内存消耗 36 8 MB 在所有 Java 提交中击败了29 78 的用户 Definition for
  • 【深度学习】迁移学习

    什么是迁移学习 迁移学习 Transfer Learning 是一种机器学习方法 就是把为任务 A 开发的模型作为初始点 重新使用在为任务 B 开发模型的过程中 迁移学习是通过从已学习的相关任务中转移知识来改进学习的新任务 虽然大多数机器学
  • 服务器当然选算力强大、换“芯”成本低的

    有一句净水器的广告语人们耳熟能详 选净水器 当然选净化效果好 换芯成本低的 随着各行各业对算力需求的不断高涨 服务器的更新换代速度也越来越快 而除了常规的换 芯 以外 服务器系统在整体设计上如何更好地满足算力多样化 管理智能化 运营安全性和
  • 分享一个数据产品的PRD

    作者 LineLian 微信 firstbodytm 随着年龄的增长会越来越重视道 重视产品成功的系统原因 重视产品的团体环境 重视还原用户的真实因子 对于术比如用啥工具 写那些文档怎么写 交互方式是多么的酷炫 界面设计的是多么的棒 流程设
  • upstream模块(开发)

    http tengine taobao org book chapter 5 html upstream模块 100 nginx模块一般被分成三大类 handler filter和upstream 前面的章节中 读者已经了解了handler
  • 使用gdb调试多进程及多线程程序

    多进程调试 首先来了解下会可能会用到的调试命令 1 默认设置下 在调试多进程程序时GDB只会调试主进程 但是如果设置follow fork mode的话 就可调试多个进程 set follow fork mode parent child
  • 直角坐标系中点的旋转【点绕点旋转】

    前言 本文整理在平面直角系中 坐标系旋转 某点绕着坐标系旋转 坐标点A 绕着点B旋转 求旋转后的点坐标 看了网上好的文章 发现部分有误或不完整 这里简单总结一下 一 点绕坐标系旋转 坐标系不变 某点 绕坐标系 原点 旋转 角度 求旋转后点的
  • GET和POST的区别,java模拟postman发post请求

    目录 一 先说一下get和post 1 看一下人畜无害的w3schools怎么说 2 问一下文心你言哥 轻轻松松给你一个标准答案 3 卧槽 懂了 好像又没懂 二 让我们扒下GET和POST的外衣 坦诚相见吧 三 我们的大BOSS还等着出场呢
  • STM32Lx在低功耗下使用软件看门狗

    看门狗对于防止程序跑死是很关键的 很多时候我们的产品需要进入低功耗 而且唤醒间隔也比较长 此时如果看门狗启动了 那么就会导致处在低功耗的MCU发生复位 解决这个问题的方法有两种 一种是增加看门狗的喂狗时间间隔 保证此间隔大于MCU唤醒间隔
  • Person Search论文——《Query-guided End-to-End Person Search》CVPR 2019笔记

    1 论文主要思想 这篇论文是以 Joint Detection and Identification Feature Learning for Person Search 作为baseline进行改进的 在保持baseline中joint
  • 关于软件开发外包,你应该注意的细节

    伴随着社会的发展 许多公司都急需一款归属于自身的软件 或是别的对自身有价值的软件 当企业沒有自身的软件开发团队 或有团队但团队无法实现这一项目时 大家的另一个解决方案便是把这个软件开发项目外包给专业的软件开发公司 并给与合理的资金和酬劳 让
  • python socket监听端口_python 用socket模块实现检测端口和检测web服务

    以下程序均来自 Python UNIX和Linux系统管理指南 检测端口 check tcp port py usr bin env python import socket import re import sys def check s