Сканирование порта IP-адреса и распечатать статус ответа с помощью Python

Я пытаюсь подключиться к порту 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 ответ

Решение

Прежде всего, 811450 не является допустимым портом. Самый большой допустимый диапазон портов TCP - 65535.

Во-вторых, вы смешиваете протокол TCP и протокол HTTP. Если вы хотите получить HTTP-ответ от сокета, вам нужно отправить действительный HTTP-запрос. Вы можете легко сделать это с requests пакет:

import requests

r = requests.get('http://xx.xx.xx.xxx:811450')
print(r.status_code)
Другие вопросы по тегам