Python检测IP端口连接是否正常

python
以下是个人学习 python 研究判断ip连通性方法的集合。 缺点可能有办法解决,如有错误,欢迎矫正。
方法一
import os
return1=os.system(‘ping -n 2 -w 1 172.21.1.183’)
print return1

缺点:会弹出cmd 窗口

方法二
#-- coding: utf-8 --
import subprocess
import re
p = subprocess.Popen(["ping.exe ", ‘172.21.183.183’],stdin = subprocess.PIPE,stdout = subprocess.PIPE,stderr = subprocess.PIPE,shell = True)
out = p.stdout.read()
print out
regex = re.compile(“Minimum = (\d+)ms, Maximum = (\d+)ms, Average = (\d+)ms”, re.IGNORECASE)
print regex.findall(out)
缺点: 默认ping 4次 暂时没有找到 控制ping次数的方法

方法三
from subprocess import call
result = call(“ping 172.21.4.20 -n 1”,shell=True)
print result
缺点,好像不太靠谱

方法四 这个方式应该是linux下的调用,没试过

import os,sys,re
import subprocess

p = subprocess.Popen([“ping -c 1 -w 1 172.21.183.183”],stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
out=p.stdout.read()
err=p.stderr.read()
regex=re.compile(‘100% packet loss’)
print out

代码如下 使用socket 的判断代码
#!/usr/bin/env python
#encoding:utf8
#author: linuxhub.org
#Python检测IP端口连接是否正常

import socket

def is_open(ip,port):
s= socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try:
s.connect((ip,int(port)))
s.shutdown(2)
return True
except:
return False

if name == ‘main’:

        host = '192.168.0.202'
        port = '6379'

        if is_open(host, port):
                        print "OK"
        else:
                        print "NO"

你可能感兴趣的:(Python检测IP端口连接是否正常)