2015-06-09 194 views
1

我想生成哼事件每當有人訪問結構類似於Snort規則正則表達式匹配

site/year2015.pdf 
site/year2014.pdf 
: 
: 
site/year2000.pdf 

而不是寫多Snort規則隨着越來越多的網址將被添加的URL多​​年來我想利用PERC的。規則寫成。

alert tcp any any -> any any(msg:"PDF is being downloaded"; pcre:"(/.*site\/year\d\d\d\d\.pdf)/i"; sid: 100003; rev:3;) 

我嘗試了許多不同的方法在上面的規則中插入正則表達式,但它總是無法解析它。正則表達式做得很好,我希望它做here。整個事情開始失敗,因爲它不會開始導致規則不被解析。接收

錯誤是

Error: /etc/snort/rules/assignment.rules Line 3 => unable to parse pcre regex "(/.*site\/year\d\d\d\d\.pdf)/i" 
Fatal Error Quitting.. 
+3

什麼是錯誤,代碼在哪裏? – sln

+1

什麼是你匹配的實際字符串? –

回答

6

的(略瘋狂)語法是pcre:"/regex/flags"。無論如何,你想放在那裏的圓括號都是多餘的。您還需要轉義作爲實際正則表達式的一部分的任何斜線,like in the example

alert tcp any any -> any any(msg:"PDF is being downloaded"; pcre:"/.*site\/year\d\d\d\d.pdf/i"; sid: 100003; rev:3;) 

...雖然也許你應該刪除多餘的通配符.*,並在結尾處添加錨點$,也難逃點,使其文字。您可能還想使用量詞來精確指定一個數字的四次重複。

alert tcp any any -> any any(msg:"PDF is being downloaded"; pcre:"/site\/year\d{4}\.pdf$/i"; sid: 100003; rev:3;) 

你真的確定你想要的/i標誌進行匹配不區分大小寫?

+0

感謝的人,它現在的作品:) :) – Babar

1

正如tripleee提到的那樣,您的圓括號錯位了......但我也認爲值得一提的是,由於這些是正則表達式,因此您在正則表達式中使用的分隔符有一些靈活性:

語法

pcre:[!]"(/<regex>/|m<delim><regex><delim>)[ismxAEGRUBPHMCOIDKYS]"; 

表明,而不是使用傳統的/分隔符,你可以使用m經營者(以下簡稱「匹配」),其次是交替的分隔符...我使用[在這種情況下]

msg:"PDF is being downloaded"; pcre:"m[site/year\d{4}\.pdf$]i"; sid: 100003; rev:3;) 

這並不買你多少在這種特殊情況下(因爲你只有一個目錄深),但更深層嵌套目錄會很快變得不可讀所有的逃過/個字符。

+0

嗯...我是新來的Perl的正則表達式。只是規則解析是一個勝利,但規則仍然沒有觸發任何事件。 :( – Babar