Newsgroup: it.comp.software.newsreader
Titolo: Curiosità sui filtri di Hamster.

Salve a tutti.
Forse mi direte che ho scoperto l'acqua calda, ma volevo chiedervi conferma
di una cosa che ho notato di Hamster. Quando creo una regola per il filtri
(posta o news, è uguale), posso usare una qualunque delle voci contenute
negli headers dei messaggi, o devo limitarmi a quelle citate nella guida in
linea e nelle FAQ? Mi spiego subito: qualche giorno fa volevo sapere se
esisteva un modo per filtrare i messaggi contenenti allegati. Una breve
ricerca su Googie mi ha mostrato un messaggio in cui si consigliava di
impostare nei filtri il parametro "Content-Type" in modo da distinguere i
messaggi contenenti allegati dagli altri, e ha funzionato, nonostante non si
faccia cenno di ciò nella guida in linea.
Riassumendo: è possibile filtrare i messaggi in base a tutti i parametri
contenuti negli header, come ad esempio il parametro NNTP-Posting-Host per
bloccare uno spammer che posta da un indirizzo IP fisso?
Spero essere stato sufficientemente chiaro: grazie a chi vorrà rispondermi.

 su
it.news.votazioni, se interessati.

 --
Questo potrebbe essermi utile, me lo scaricherň quanto prima.
Grazie 1000 per i chiarimenti.

Puoi  filtrare  una  mail  in  base  a  qualsiasi  header
[cut]
Sei sicuro di cio`? Anche con la Classic Hamster?
Oggi mi e` arrivata la notifica di una mail ignorata, cosi` ne ho
approfittato e ho provato a filtrarla in base all'ultimo Received,
inserendo questa riga in MailFilt.hst:
kill() Received: "211.xxx.xxx.xxx"
(ovviamente l'IP non era oscurato).
Purtroppo pero` il filtro non ha funzionato.
Possibile che ci voglia una sintassi diversa?
Ho Hamster Classic 1.3.23.141
-- 
Pino Pinto
Out of my mind. Back in five minutes.


Io avrei scritto cosě:
kill() Received: from "211.xxx.xxx.xxx"
oppure
kill() Any-Sender: "211.xxx.xxx.xxx"
Da quello che ho capito, devi copiare la voce che trovi nell'header (almeno
credo), mentre la scritta Any-Sender rappresenta una specie di jolly che
rappresenta tutte le voci.
Ciao.

kill() Received: "211.xxx.xxx.xxx"
Se  scrivi  così,  viene controllato solo il primo Received a partire
dall'alto (cioè quello inserito per  ultimo).  Quando  sono  presenti
più  header  collo  stesso  nome  (il caso di Received è tipico), per
controllarli tutti devi anteporre un asterisco al  nome  dell'header:
kill() *Received: "211.xxx.xxx.xxx"


kill() *Received: "211.xxx.xxx.xxx"
Grandioso! Grazie.
Ne approfitto per porre un'altra domanda sulla falsariga della
precedente: e` possibile in qualche modo filtrare con la notazione
CIDR o comunque indicare un insieme contiguo di IP (es: 192.168.0.0 -
192.168.0.255)?


 192.168.0.255)?
Non ho provato, ma le regexp non funzionano da quelle parti?
-- 
     __         ____           | Eì 'Aanììgòò 'Ahoot'é
 __ / /__  ___ / __/__ __ __   |
/ // / _ \/ -_) _// _ \\ \ /   | 
http://www.macrossmm.com
\___/\___/\__/_/  \___/_\_\    | ICQ UIN: 61571298

192.168.0.255
Beh,  il  tuo  esempio  ha una soluzione facile: non ci vuole neppure
una regexp:
	kill() *Received: "192.168.0."
Questo perché ignori tutto l'ultimo ottetto, e te ne  freghi  che  il
filtro   qui  sopra  killi  anche  gli  impossibili  192.168.0.793  e
192.168.0.ciao.
E' facile filtrare per intero qualsiasi ottetto:
	kill() *Received: {192\.168\.\d{1,3}\.1}
filtrerebbe, grossolanamente, il terzo.
Se volessi filtrare 5.*.*.*, basterebbe scrivere:
	kill() *Received: {(?<!\d)5(\.\d{1,3}){3}}
dove (?<!\d) significa "non preceduto da una cifra".
Vediamo come filtrare precisamente  un  range  (7-223,  per  esempio)
nell'ultimo ottetto di 192.168.0.*.
Possiamo avere una, due o tre cifre:
se è una, può variare fra 7 e 9;
se  sono due, ci deve essere il match (ma la prima non dev'essere 0);
se sono tre: se la prima è 1, le altre due non sono rilevanti; se  la
prima è 2...[omissis].
In soldoni:
	kill() *Received: {192\.168\.0\.([7-9]|[1-9]\d|1\d{2}|2[01]\d|22[0-3])(?!\d)}
BTW: l'espressione (?!\d) significa "non seguito da una cifra".


Non ho provato, ma le regexp non funzionano da quelle parti?
Boh! Se mi dai la soluzione al problema di cui sopra, la provo e te lo
faccio sapere :-P
A parte gli scherzi, purtroppo conosco le regexp solo superficialmente
e, tra C++ e AutoLisp, questo non mi sembra il momento piu` adatto per
approfondirle se voglio conservare un barlume di sanita` mentale ^^;
Comunque spulciando un po' il manualone della O'Reilly, ho dedotto che
per filtrare, ad esempo, un`intera classe B si potrebbe usare questa
regexp:
{192\.168(\.[0-9]+){2}}
Il problema pero` sorge con gruppi IP diversi da una classe intera,
come ad esempio 192.168.3.15 - 192.168.200.24
Infatti non credo che sia sintatticamente valida la regexp
{192\.168\.[3-200]\.[15-24]}
Ammesso anche fosse corretta, essa sarebbe comunque pericolosa perche`
usandola per filtrare, ad esempio, l'intervallo 192.168.3.24 -
192.168.200.15 essa "matcherebbe" anche 192.168.3.15 - 192.168.3.23 e
192.168.200.16 - 192.168.200.24, esterni all'intervallo desiderato.
Come si puo` fare dunque?


 Come si puo` fare dunque?
Dividerla in piu' intervalli o "validare" (cioè forzare successivamente ad 
essere scaricati) gli intervalli che vuoi escludere dall'essere killati.
Per intenderci, parlando di alfabeto... Ottieni lo stesso risultato 
killando da A a Z e convalidando successivamente da L a Q sia che killando 
da A a K e da R a Z....
(spero di essere stato chiaro)


una regexp:
[cut]
Grazie a te e a Joe Fox; siete stati davvero illuminanti!
-- 
 ___ _            |
| _ (_)_ _  ___   |
|  _/ | ' \/ _ \  | PGP key fingerprint:
|_| |_|_||_\___/  | 0B6D CA29 72A5 7F36 0343  72E2 ECDA B516 8747 C639