zhaohang3031 发表于 2010-02-23 19:05

判断远端服务器端口是否通


一个简单的判断远端服务器端口是否通的脚本:
import socket
sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sk.settimeout(1)
try:
    sk.connect(('192.168.0.1',21))
    print 'Server port 21 OK!'
except Exception:
    print 'Server port 21 not connect!'
sk.close()


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/93470/showart_2185372.html

ccjgh000 发表于 2012-09-03 10:36

3Q:wink::wink:

domenet 发表于 2016-10-09 20:38

#!/usr/bin/env python
#-*- coding:utf-8 -*-
import socket,re,threading
from Tkinter import *
def ConnSocket(entText):   
    rec=re.compile(r'(^(?:\d{1,3}\.){3}\d{1,3}:\d{1,5}$)')
    ref=re.findall(rec,entText.strip())
    if len(ref)==0:
      v.set(u'输入错误! Tip:<ip:port>')
      ent['foreground']='black'
      ent['background']='red'
      ent.icursor(END)
      btn['state']='normal'
    else:
      entText=entText.split(':')
      HOST=entText
      PORT=int(entText)
      if PORT>65535:
            v.set(u'Port[%d] Port<1-65535>'%PORT)
            ent['foreground']='black'
            ent['background']='red'
            ent.icursor(END)
            btn['state']='normal'
      else:
            try:
                s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
                s.settimeout(3)
                status=s.connect_ex((HOST,PORT))
                if status==0:
                  v.set(u'连接[%s:%d]成功!'%(HOST,PORT))
                  ent['foreground']='black'
                  ent['background']='green'
                  ent.icursor(END)
                else:
                  v.set(u'连接[%s:%d]失败!'%(HOST,PORT))
                  ent['foreground']='black'
                  ent['background']='red'
                  ent.icursor(END)
            except Exception as e:
                v.set(u'其它错误 %s'%e)
                ent['foreground']='black'
                ent['background']='red'
            finally:
                s.close()
                btn['state']='normal'
def selectAll(*ignore):
    ''' Set selection on the whole text '''
    ent.selection_range(0, 'end')
    # returns 'break' to interrupt default key-bindings
    return 'break'
def startThread():
    btn['state']='disabled'
    entText=ent.get()
    t=threading.Thread(target=ConnSocket,args=(entText,))
    t.start()
if __name__=='__main__':
    root=Tk()
    root.title(u'Python端口测试 <by Domenet>')
    v=StringVar()
    lb=Label(root,text='<IP:PORT>')
    root.geometry("330x50")
    root.resizable(False, False)
    ent=Entry(root,textvariable=v,width=27)
    v.set('127.0.0.1:8080')
    btn=Button(root,text=u'确定',command=startThread)
    ent['selectforeground']='white'
    ent['selectbackground']='black'
    ent.bind("<Control-a>", selectAll)
    lb.pack(side=LEFT,padx=2,pady=5)
    ent.pack(side=LEFT,padx=5,pady=5)
    btn.pack(side=LEFT,fill=X,padx=2,pady=5)
    mainloop()
页: [1]
查看完整版本: 判断远端服务器端口是否通