Сканирование порта 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)