Redirect Program no Squid... Duvida

1. Redirect Program no Squid... Duvida

daniel enos cavalcanti rodrigues de macedo
denosmacedo

(usa Outra)

Enviado em 13/01/2011 - 17:41h

Ola!

Eu criei um plugin para o squid de tal forma que no lugar de qualquer imagem desse site aparecesse uma outra imagem qualquer.

Em outras palavras, o plugin recebia uma url... baixava o conteudo dessa url... verificava se era imagem (PNG, JPEG, por exemplo)... caso fosse imagem, nao devolvia essa URL mas sim uma outra.

Aqui esta a regra que eu usei para usar o plugin:
redirect_program /usr/local/squid/plugin.py

No entanto, quando uso o plungin, nem todas as imagens sao bloqueadas!!! É como se nem todas as urls das imagens da pagina fosse passadas para o plugin. Algumas são passadas, outras nao!!!

Alguem pode me dizer o por que disso? Sera que ha alguma maneira que eu possa fazer para com que todas as urls sejam passadas?

Grato =)

obs: Nao pus o codigo do plugin aki para evitar poluicao, mas se quizerem ver... o postarei! =)


  


2. Re: Redirect Program no Squid... Duvida

Jefferson Diego
Diede

(usa Debian)

Enviado em 14/01/2011 - 04:00h

redirect_program??? QUal é a versão do seu Squid?
Bom, em geral, nos redirects/rewriters, há duas opções, chamadas "children" e "concurrency". Por padrão, o squid pára de mandar dados para os redirects quando eles estão "ocupados". Talvez você tenha que aumentar o número dessas opções...


3. diede e OUTROS :)

daniel enos cavalcanti rodrigues de macedo
denosmacedo

(usa Outra)

Enviado em 14/01/2011 - 12:11h

meu squid eh 3.1.10, o redirect_program tah ultrapassado? ele reconheceu aki...

oh so...

Pelo o que eu lie, o auth_param, o children, concurrency, servem para aumentar o numero de processos filhos que o "squid" pode funcionar... entao aumentei esse valor para 1000 assim ele devria bloquear mais fotos, nao eh?

Olhe so a regra q usei:
auth_param digest children 5 startup=10 idle=10000 concurrency=10000


Algo estranho começou a fazer. todas as paginas estao sendo completamente substiruidas e nao so a imagens dela (axo que esse ja eh um problema no meu plugina, concordam?).

o que me sugerem?


Para que possam entender melhor o que estou falando... estou disponiblizando abaixo o codigo e um trecho do cache.log respectivamente

obs: O codigo eh bem pequeno, facilimo de enteder! e ainda esta comentado :) nesse caso, eu substituo toda e qualquer imagem pela uma outra imagem qualquer! :)

#!/usr/bin/python -u
# -*- coding: iso-8859-1 -*-

import sys
import os
import datetime

while True:
line = sys.stdin.readline()
if not line:
break
param = line.split(' ')
url = param[0]
url = url.replace("\n", "")

s = ("echo "+url+">> /tmp/logcurl")
s = s.replace("\n", " ")
os.system(s)

#Pego a data atual para criar um arquivo no futuro
x = datetime.datetime.now()
y = str (x)
y = y.replace(' ', '')
y = "/tmp/"+y;

#Crio um novo arquivo, com o nome da data atual, contendo o cabeçalho do hatml
s = ("wget -nv -q \"" + url + "\" -O " + y)
s = s.replace("\n", "")
os.system(s)

#leio o arquivo contendo o cabeçalho do html e vejo se tem um arquivo jpg nele.
typeFile = (y+"-type")
s = ("file -b "+y+" > "+ typeFile)
os.system(s)
arq = open(typeFile, "r")
stringTrabalho = arq.read()
#print stringTrabalho
ehJPEG = stringTrabalho.find("JPEG")
ehjpeg = stringTrabalho.find("jpeg")
ehGIF = stringTrabalho.find("GIF")
ehgif = stringTrabalho.find("gif")
ehPNG = stringTrabalho.find("PNG")
ehpng = stringTrabalho.find("png")
ehDCA = stringTrabalho.find("images/DCArev3t.gif")

arq.close()
#caso tenha jpeg troca pela a url da logomarca do google, caso nao manda seguir
if ehDCA != -1:
print '\n'
else:
if ehjpeg != -1 or ehJPEG != -1 or ehgif != -1 or ehGIF != -1 or ehpng != 1 or ehPNG != -1 :
print '302:http://www.dca.ufrn.br/images/DCArev3t.gif\n'
else:
print '\n'



trecho do cache.log
'
2011/01/14 10:35:28| helperHandleRead: unexpected read from redirector #2, 1 bytes '
'
2011/01/14 10:35:28| helperHandleRead: unexpected read from redirector #3, 1 bytes '
'
2011/01/14 10:35:28| helperHandleRead: unexpected read from redirector #1, 1 bytes '
'
2011/01/14 10:35:29| helperHandleRead: unexpected read from redirector #4, 1 bytes '
'
2011/01/14 10:35:29| helperHandleRead: unexpected read from redirector #1, 1 bytes '
'
2011/01/14 10:35:30| helperHandleRead: unexpected read from redirector #1, 47 bytes '302:http://www.dca.ufrn.br/images/DCArev3t.gif
'
2011/01/14 10:35:30| helperHandleRead: unexpected read from redirector #1, 1 bytes '



4. Re: Redirect Program no Squid... Duvida

Davi Ribeiro
dastyler

(usa Fedora)

Enviado em 14/01/2011 - 12:30h

Debugando o código em Python:

1) Crie uma página local no seu Apache para testes;
2) Aplique a regra do redirect_program nesta página;
3) veja se vai substituir soomente a imagem ou toda a pagina.
Se substituir a página inteira tem alguma inconsistência no código em Python.

[]´s


5. dastyler

daniel enos cavalcanti rodrigues de macedo
denosmacedo

(usa Outra)

Enviado em 14/01/2011 - 14:53h

Obrigado pela dica :)

nao foi necessario, fiz testes a mao mesmo e agora oc odigo nao tem mais incoerencia
No entanto permanece com os mesmos erros e acredito eu pela razao que eu havia falado antes. O squid nao esta mandando todas as urls para o plugin, por isso fica algumas imagens aberto.

Tentei aplicar o que diede falou, mas axo que nao soube muito bem fazer, pois ainda da os mesmo erros...
Alguma sugestao de como devo usar o: children concurrency

#!/usr/bin/python -u
# -*- coding: iso-8859-1 -*-

import sys
import os
import datetime

while True:
line = sys.stdin.readline()
if not line:
break
param = line.split(' ')
url = param[0]
url = url.replace("\n", "")

s = ("echo "+url+">> /tmp/logcurl")
s = s.replace("\n", " ")
os.system(s)

#Pego a data atual para criar um arquivo no futuro
x = datetime.datetime.now()
y = str (x)
y = y.replace(' ', '')
y = "/tmp/"+y;

#Crio um novo arquivo, com o nome da data atual, contendo o cabeçalho do hatml
s = ("wget -nv -q \"" + url + "\" -O " + y)
s = s.replace("\n", "")
os.system(s)

#leio o arquivo contendo o cabeçalho do html e vejo se tem um arquivo jpg nele.
typeFile = (y+"-type")
s = ("file -b "+y+" > "+ typeFile)
os.system(s)
arq = open(typeFile, "r")
stringTrabalho = arq.read()
#stringTrabalho = url
#print stringTrabalho
ehJPEG = stringTrabalho.find("JPEG")
ehjpeg = stringTrabalho.find("jpeg")
ehGIF = stringTrabalho.find("GIF")
ehgif = stringTrabalho.find("gif")
ehPNG = stringTrabalho.find("PNG")
ehpng = stringTrabalho.find("png")
ehDCA = stringTrabalho.find("images/DCArev3t.gif")

arq.close()
#caso tenha jpeg troca pela a url da logomarca do google, caso nao manda seguir
if ehDCA != -1:
print '\n'
else:
if ehjpeg != -1 or ehJPEG != -1 or ehgif != -1 or ehGIF != -1 or ehpng != -1 or ehPNG != -1 :
print '302:http://www.dca.ufrn.br/images/DCArev3t.gif\n'
else:
print '\n'







6. Re: Redirect Program no Squid... Duvida

Jefferson Diego
Diede

(usa Debian)

Enviado em 14/01/2011 - 15:49h

Perguntei quanto a versão, pois lembro desse "redirect_program" na versão 2.6 do Squid...
Depois vieram as "url_rewriter", e "store_rewrite".
A url_rewrite (presente no squid 2.6, 2.7 e 3.1) (o 3.0 não tenho certeza se tem), tem as opções children e concurrency:
url_rewrite_program
url_rewrite_children
url_rewrite_concurrency
Experimente fazer um teste, "portanto" seu redirect_program para "url_rewrite"...

Não manjo de Python, mas dependendo de como foi feito seu script, seria interessante setar o concurrency para "0" e o children para "200", por exemplo (200 processos executando um redirecionamento cada)






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts