打印可变长度字符串的一部分
Print a part of a string of variable length
我想打印字符串中的IP1地址request
;这些是所述字符串的内容:
b'GET /submit_IP?IP1=192.168.15.66&IP2=255.255.255.0&IP3=192.168.15.1&IP4=192.168.15.1 HTTP/1.1\r\nHost: 192.168.15.66\r\nConnection: keep-alive\r\nUpgrade-Insecure-Requests: 1\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\nReferer: http://192.168.15.66/submit_IP?IP1=192.168.15.66&IP2=255.255.255.0&IP3=192.168.15.1&IP4=192.168.15.1\r\nAccept-Encoding: gzip, deflate\r\nAccept-Language: en,cs;q=0.9,en-GB;q=0.8,fr;q=0.7\r\n\r\n'
但是,问题是地址可以更长或更短,例如1.1.1.1
或192.168.150.150
。我试过了:
print(request[(request.find(IP1=) + 4):-(len(request) - (len(request) - request.find(IP2=) - 2))])
... returns SyntaxError: 语法无效.
使用正则表达式:
例如:
import re
s = b'GET /submit_IP?IP1=192.168.15.66&IP2=255.255.255.0&IP3=192.168.15.1&IP4=192.168.15.1 HTTP/1.1\r\nHost: 192.168.15.66\r\nConnection: keep-alive\r\nUpgrade-Insecure-Requests: 1\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\nReferer: http://192.168.15.66/submit_IP?IP1=192.168.15.66&IP2=255.255.255.0&IP3=192.168.15.1&IP4=192.168.15.1\r\nAccept-Encoding: gzip, deflate\r\nAccept-Language: en,cs;q=0.9,en-GB;q=0.8,fr;q=0.7\r\n\r\n'
m = re.search(r"IP1=(.+?)(?=&)", str(s))
if m:
print(m.group(1)) #--> 192.168.15.66
尝试
request = b'GET /submit_IP?IP1=192.168.15.66&IP2=255.255.255.0&IP3=192.168.15.1&IP4=192.168.15.1 HTTP/1.1\r\nHost: 192.168.15.66\r\nConnection: keep-alive\r\nUpgrade-Insecure-Requests: 1\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\nReferer: http://192.168.15.66/submit_IP?IP1=192.168.15.66&IP2=255.255.255.0&IP3=192.168.15.1&IP4=192.168.15.1\r\nAccept-Encoding: gzip, deflate\r\nAccept-Language: en,cs;q=0.9,en-GB;q=0.8,fr;q=0.7\r\n\r\n'
startint = str(request).find('IP1=') + 4
endint = str(request).find('&IP2=')
print(str(request)[startint:endint])
输出:
192.168.15.66
编辑:单行
print(str(request)[str(request).find('IP1=') + 4:str(request).find('&IP2=')])
您可以在 request
字符串中搜索字符 =
和 &
以找到它们的位置。
print(request[request.find("=")+1:request.find("&")])
我会使用更通用的方法,使用 python 库 urllib 解码整个查询字符串,然后获取您想要的参数,如下所示:
import urllib.parse
query_string = request.split(b" ", 2)[1].split(b"?", 1)[1]
parameters = urllib.parse.parse_qs(query_string)
print(parameters[b"IP1"])
我想打印字符串中的IP1地址request
;这些是所述字符串的内容:
b'GET /submit_IP?IP1=192.168.15.66&IP2=255.255.255.0&IP3=192.168.15.1&IP4=192.168.15.1 HTTP/1.1\r\nHost: 192.168.15.66\r\nConnection: keep-alive\r\nUpgrade-Insecure-Requests: 1\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\nReferer: http://192.168.15.66/submit_IP?IP1=192.168.15.66&IP2=255.255.255.0&IP3=192.168.15.1&IP4=192.168.15.1\r\nAccept-Encoding: gzip, deflate\r\nAccept-Language: en,cs;q=0.9,en-GB;q=0.8,fr;q=0.7\r\n\r\n'
但是,问题是地址可以更长或更短,例如1.1.1.1
或192.168.150.150
。我试过了:
print(request[(request.find(IP1=) + 4):-(len(request) - (len(request) - request.find(IP2=) - 2))])
... returns SyntaxError: 语法无效.
使用正则表达式:
例如:
import re
s = b'GET /submit_IP?IP1=192.168.15.66&IP2=255.255.255.0&IP3=192.168.15.1&IP4=192.168.15.1 HTTP/1.1\r\nHost: 192.168.15.66\r\nConnection: keep-alive\r\nUpgrade-Insecure-Requests: 1\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\nReferer: http://192.168.15.66/submit_IP?IP1=192.168.15.66&IP2=255.255.255.0&IP3=192.168.15.1&IP4=192.168.15.1\r\nAccept-Encoding: gzip, deflate\r\nAccept-Language: en,cs;q=0.9,en-GB;q=0.8,fr;q=0.7\r\n\r\n'
m = re.search(r"IP1=(.+?)(?=&)", str(s))
if m:
print(m.group(1)) #--> 192.168.15.66
尝试
request = b'GET /submit_IP?IP1=192.168.15.66&IP2=255.255.255.0&IP3=192.168.15.1&IP4=192.168.15.1 HTTP/1.1\r\nHost: 192.168.15.66\r\nConnection: keep-alive\r\nUpgrade-Insecure-Requests: 1\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\nReferer: http://192.168.15.66/submit_IP?IP1=192.168.15.66&IP2=255.255.255.0&IP3=192.168.15.1&IP4=192.168.15.1\r\nAccept-Encoding: gzip, deflate\r\nAccept-Language: en,cs;q=0.9,en-GB;q=0.8,fr;q=0.7\r\n\r\n'
startint = str(request).find('IP1=') + 4
endint = str(request).find('&IP2=')
print(str(request)[startint:endint])
输出:
192.168.15.66
编辑:单行
print(str(request)[str(request).find('IP1=') + 4:str(request).find('&IP2=')])
您可以在 request
字符串中搜索字符 =
和 &
以找到它们的位置。
print(request[request.find("=")+1:request.find("&")])
我会使用更通用的方法,使用 python 库 urllib 解码整个查询字符串,然后获取您想要的参数,如下所示:
import urllib.parse
query_string = request.split(b" ", 2)[1].split(b"?", 1)[1]
parameters = urllib.parse.parse_qs(query_string)
print(parameters[b"IP1"])