扫描IP地址的端口并使用python打印响应状态

时间:2018-01-19 10:16:07

标签: python sockets ip port

我正在尝试点击IP地址的端口并打印status code(即200 OK , 502 Bad Gateway等)。假设,我们说port 80在IP地址xx.xx.xx.xxx处打开。因此,xx.xx.xx.xxx:80应该给我们200 OK。在我的代码中,我使用的是端口811450,它肯定没有打开,也没有应用程序在那里运行。但它没有显示任何错误。

import httplib  
import urllib
import socket


class mysocket:


    def __init__(self, sock=None):
        if sock is None:
            self.sock = socket.socket(
                socket.AF_INET, socket.SOCK_STREAM)
        else:
            self.sock = sock

    host = "xx.xx.xx.xxx"
    port = "811450"

    def connect(self, host, port):
        self.sock.connect((host, port))

    def mysend(self, msg):
        totalsent = 0
        while totalsent < MSGLEN:
            sent = self.sock.send(msg[totalsent:])
            if sent == 0:
                raise RuntimeError("socket connection broken")
            totalsent = totalsent + sent

    def myreceive(self):
        chunks = []
        bytes_recd = 0
        while bytes_recd < MSGLEN:
            chunk = self.sock.recv(min(MSGLEN - bytes_recd, 2048))
            if chunk == '':
                raise RuntimeError("socket connection broken")
            chunks.append(chunk)
            bytes_recd = bytes_recd + len(chunk)
        return ''.join(chunks)

实现它的推荐方法是什么。

1 个答案:

答案 0 :(得分:0)

首先,811450不是有效端口。最大的有效TCP端口范围是65535。

其次,您正在混淆TCP协议和HTTP协议。如果需要来自套接字的HTTP响应,则需要发送有效的HTTP请求。您可以使用requests包轻松完成此操作:

import requests

r = requests.get('http://xx.xx.xx.xxx:811450')
print(r.status_code)