Tengo un sencillo capturador de banners. Si agarro un banner de Google, recibo algo de vuelta.

¿Quiero encontrar una palabra específica dentro de los datos del socket? ¿Cómo puedo hacer eso?

Capturadora de mi banner:

import socket
import ipaddress

import socket
host = "www.google.nl"
port = 80
addr = (host, port)
s = socket.socket()
s.connect (addr)
s.send(b'GET / HTTP/1.1\n\n\n')
print(s.recv(1024))

Banner que recibo de Google.nl (s.recv (1024)):

b'HTTP/1.1 302 Found\r\nCache-Control: private\r\nContent-Type: text/html; charset=UTF-8\r\nReferrer-Policy: no-referrer\r\nLocation: http://www.google.nl/?gfe_rd=cr&dcr=0&ei=XrAKWpHeJ9GC3gOB_ZWoBg\r\nContent-Length: 268\r\nDate: Tue, 14 Nov 2017 08:59:10 GMT\r\n\r\n<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">\n<TITLE>302 Moved</TITLE></HEAD><BODY>\n<H1>302 Moved</H1>\nThe document has moved\n<A HREF="http://www.google.nl/?gfe_rd=cr&amp;dcr=0&amp;ei=XrAKWpHeJ9GC3gOB_ZWoBg">here</A>.\r\n</BODY></HTML>\r\n'

Lo que quiero:

If "Document" is in s.recv(1024):
print ("Document is found in the banner!")

Else:
print ("No keyword found")
1
user6203336 14 nov. 2017 a las 12:09

2 respuestas

La mejor respuesta

Si escribe el pseudocódigo if else construye en python (cambio simple), almacena los bytes recibidos en la variable y los transforma ingenuamente en una cadena, puede continuar su programación con:

import socket
host = "www.google.nl"
port = 80
addr = (host, port)
s = socket.socket()
s.connect(addr)
s.send(b'GET / HTTP/1.1\n\n\n')
b_text = s.recv(1024)
print(b_text)
if "Document" in str(b_text):
    print("Document is found in the banner!")
else:
    print("No keyword found")

En caso de que quiera ahorrar la variable (no sé el caso de uso), un fragmento de código que funciona "directamente en el resultado de la llamada a s.recv ()" es:

import socket
host = "www.google.nl"
port = 80
addr = (host, port)
s = socket.socket()
s.connect(addr)
s.send(b'GET / HTTP/1.1\n\n\n')
if "Document" in str(s.recv(1024)):
    print("Document is found in the banner!")
else:
    print("No keyword found")
-1
Dilettant 14 nov. 2017 a las 09:20

Es mejor utilizar la herramienta adecuada para el trabajo en lugar de enchufes de bajo nivel. requests es una biblioteca de terceros popular para realizar solicitudes HTTP.

>>> import requests
>>> r = requests.get('http://www.google.nl')
>>> r.headers
{'Date': 'Tue, 14 Nov 2017 17:13:33 GMT', 'Expires': '-1', 'Cache-Control': 'private, max-age=0', 'Content-Type': 'text/html; char
set=ISO-8859-1', 'P3P': 'CP="This is not a P3P policy! See g.co/p3phelp for more info."', 'Server': 'gws', 'Content-Length': '5129
', 'X-XSS-Protection': '1; mode=block', 'X-Frame-Options': 'SAMEORIGIN', 'Via': '1.1 jfdmzpr06', 'Connection': 'Keep-Alive', 'Cont
ent-Encoding': 'gzip', 'Set-Cookie': '1P_JAR=2017-11-14-17; expires=Thu, 14-Dec-2017 17:13:33 GMT; path=/; domain=.google.nl, NID=
117=Sa3F7Bq4oXkQdcBu5OXCM3AdfyGZbxABbYqFMenMm-Ru4nITdC8tQujRxLJPl3aUG8ksQM-uDF56jlDrk0Hm9KMVkbOcb51K0oyys0PFU3ZEaSS5TnzBGk_dOYmK4X
vS; expires=Wed, 16-May-2018 17:13:33 GMT; path=/; domain=.google.nl; HttpOnly'}
>>> r.status_code
200
>>> r.text[:1000]
'<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en"><head><meta content="Search the world\'s informa
tion, including webpages, images, videos and more. Google has many special features to help you find exactly what you\'re looking
for." name="description"><meta content="noodp" name="robots"><meta content="text/html; charset=UTF-8" http-equiv="Content-Type"><m
eta content="/logos/doodles/2017/131st-anniversary-of-the-hole-puncher-5763551741345792.3-law.gif" itemprop="image"><meta content=
"131st Anniversary of the Hole Puncher" property="twitter:title"><meta content="131st Anniversary of the Hole Puncher #GoogleDoodl
e" property="twitter:description"><meta content="131st Anniversary of the Hole Puncher #GoogleDoodle" property="og:description"><m
eta content="summary_large_image" property="twitter:card"><meta content="@GoogleDoodles" property="twitter:site"><meta content="ht
tps://www.google.com/logos/doodles/2017/131st-anniversary-of-the-hole-puncher-576355174134579'
>>> 'History' in r.text
True
0
Mark Tolonen 14 nov. 2017 a las 17:16