Existem vários problemas com esta questão:
-
Você não nos contou qual linguagem de programação está usando, ou pelo menos qual o sabor das expressões regulares. POSIX? PCRE Algo incomum?
-
Em que contexto você está usando isso? Você está executando um servidor HTTP e os clientes estão enviando solicitações como essas? Ou você está executando um proxy que aceita essas solicitações e as analisa? Qual proxy você está usando - é algo que você escreveu manualmente (em qual idioma?) Ou algo que você baixou?
-
Não está claro em sua postagem que você está recebendo dois
User-Agent:
cabeçalhos especificados em uma única solicitação. Na sua postagem, você parece ter alguns problemas de quebra de linha (que eu editei), mas parece que você está recebendo três solicitações HTTP separadas , e é perfeitamente correto ter diferentesUser-Agent:
em cada solicitação HTTP. Se você está realmente recebendo informações de um cliente como os dados que você estava vendo em sua postagem original (com NO linebreak após oUser-Agent:
e antes do próximoCONNECT
), alguém está tentando enganar o seu proxy de propósito, omitindo o linebreak, e tentando fazer pipelining HTTP através do seu proxy. Uma implementação compatível com padrões terá quebras de linha, mesmo se o Corpo da Solicitação HTTP estiver vazio. -
Tentar analisar coisas usando expressões regulares é perigoso. No mínimo, você precisa estar preparado para lidar com entradas arbitrárias. Não há um padrão universalmente aceito para a formatação da string
User-Agent:
, e muitos hosts públicos da Internet que se conectam a um servidor da Web público tentam "confundir" o servidor enviando solicitações malformadas. É perfeitamente possível que um cliente envie cabeçalhos como os seguintes, mesmo todos em um único pedido, se quiserem:User-Agent: Lol your regex não corresponde a este User-Agent: Mozzarella / 0.-0 ((Vamos) () confundir seu registro ((ex)) ((()) ApplePie / -NaN (FUZZ, como Polícia) 3.14159 \ EvilAttacker) User-Agent: Mozilla / 5.0 (Windows LOL 973.1; LOL64) ...
-
Tentando entender o user-agent de um cliente e, em seguida, coletar informações úteis de que é estúpido . Como o cliente pode configurá-lo como quiser, você não deve considerar um determinado user-agent para significar qualquer coisa. É como se eu dissesse "Eu tenho um milhão de dólares!" Tem algum motivo especial para acreditar em mim? Eu estou simplesmente alegando esse fato.
User-Agent:
não é diferente. Uma caixa do Windows 95 poderia alegar ser o Windows 8.1 executando o IE 11. Uma caixa do Mac OS X 10.8 poderia ser o Red Hat Enterprise Linux 5 executando o Firefox 2.0. Alguém deliberadamente tentando enganar com você poderia alegar que seu sistema operacional é "AsadzOS versão 0.1".
Existem muito poucos usos razoáveis do cabeçalho User-Agent:
e, em cada um desses casos de uso, é essencial que você lide com todas as possíveis falhas, falsos positivos, falsos negativos, etc. com muito cuidado e evite qualquer falha não intencional. comportamento em seu analisador desistindo se você não conseguir entender a entrada.
Além de tudo isso , esta é uma questão para o StackOverflow, já que é completamente fora do tópico no SuperUser discutir técnicas de programação. Eu só precisava postar esta resposta longa para explicar a você por que essa é uma pergunta ruim.