import unittest from collectionparser.parser import parseline as p from collectionparser.splitter import get_output_file from collectionparser.utils import PasswordType class ParserTest(unittest.TestCase): def test_parse_1(self): self.assertIsNotNone(p("hello@gmail.com:123")) self.assertIsNotNone(p("hello@@gmail.com:123")) self.assertIsNotNone(p("hello @ gmail.com:123")) self.assertIsNotNone(p("hello @@ gmail.com:123")) self.assertIsNotNone(p("hello @@ gmail.com:123:")) self.assertIsNone(p("keyless.immo@gmail.com:")) self.assertIsNotNone(p("premy.enseirb@gmail.com 2296")) self.assertIsNotNone(p("hello @@ gmail.com,123")) self.assertIsNotNone(p("123,hello @@ gmail.com")) self.assertIsNone(p("hello@gmail.com123")) self.assertIsNone(p("gauntletskd@gmail.com:?????? ??? ?????")) self.assertIsNone( p("geoffroy.fogeoff4q@yahoo.co.uk.depth66charge:85.242.201.81,felix") ) self.assertIsNone( p("thakhuy.step129@hotmail.com.kkk111:125.26.106.158,nopparat") ) self.assertIsNone( p( "bitebackbulldog@gmail.com:INSERT INTO `users" "`(`id`, `verify`, `username`, `email`, `password" ) ) self.assertIsNotNone(p("aferrer@e-vende.com:Login")) self.assertIsNotNone(p("misseme21@yahoo.jp ilovebois3")) self.assertIsNotNone(p(".y.heine@gmail.com atohiyamamot")) self.assertIsNotNone(p("taa06@hotmail.com@hotmail.com:8765432f")) self.assertIsNotNone(p("neanta,buru@ezweb.ne,jp:123")) self.assertIsNotNone(p("iemongozalu@gmail@com mizo1210")) self.assertIsNotNone(p("violet28@hotmail.co.jp@hotmail.com:sayonara")) self.assertIsNone(p("iemongozalu@gmail@com:")) self.assertIsNone(p("iemongozalu@gmail@com,")) self.assertIsNotNone(p("josephinejekyl@hotmail.co.uk chi chi 123")) self.assertIsNotNone(p("h.umehara@seedinc.co.jp@34589@@@@@@:19820429")) self.assertIsNotNone(p("heavenz_klein@zpost.plala.or.jp@33584@@@@@@ 03260702")) self.assertIsNotNone(p(":")) self.assertIsNotNone(p("patricksullivan88@hotmail.jp< gorillague")) self.assertIsNone(p("@bk.ru:peng7788525")) self.assertIsNone(p("@mail.ru:andrew123")) self.assertIsNone(p("test@bk.ru:lippens")) self.assertIsNone(p("ESSENTIALWAY")) self.assertIsNone(p("ESTARRON-ESPINOSA")) self.assertIsNone(p("ERLONMIRANDA:sha98ne")) # No '@' and no '%40' -> cannot yield a pair, must stay None. self.assertIsNone(p("no at sign at all")) self.assertIsNone(p("plain text line:with:colons")) self.assertIsNotNone(p("user%40domain.com:password")) # %40 still becomes '@' self.assertIsNotNone( p("hookturn54@hotmail.com:3318flindo2003@yahoo.ca:victory") ) self.assertIsNotNone(p("mbssundaram@gmail.com;;shanmuga6")) self.assertIsNotNone(p("mbssundaram@gmail.com::shanmuga6")) self.assertIsNotNone(p("mbssundaram@gmail.com::hell@")) self.assertIsNotNone(p("mbssundaram@gmail.com::hell@:")) self.assertIsNotNone(p("Aliulfat 05@gmail.com:4849040")) self.assertIsNotNone(p("harry gill@ yaho.com:7087096771")) self.assertIsNotNone(p("shaheen .jafri @gmail.com:destinyuntold")) self.assertIsNotNone(p("mail@ottino snc.it:04921540011")) self.assertIsNone(p("sssssssandhya@gmail.:puleyar1")) self.assertIsNotNone(p("cjywzy%40eyou.com:Aebdd797")) self.assertIsNotNone(p("finanza.rapido2013%40yahoo.it:123456")) self.assertIsNotNone(p("habitacasa3%40yahoo.it:cesira89")) self.assertIsNotNone(p("harry gill@ yaho.com:7087096771")) self.assertIsNone(p("uwe kopka :biochemie")) # multi-line. self.assertIsNotNone(p("INLOVE12:::1920-05-02:MENDHER4LIFE@yahoo.com:INLOVE12")) self.assertIsNotNone( p("Nicesweetboobs:1983-10-05:happy.house@outlook.com:ilovekiss") ) self.assertIsNotNone( p("Katiya_ivanova1997@mail.ru:Katiya_ivanova1997@mail.ru;97tata1") ) multi_lines = [ "piabersas@libero.it;stefano.ripamonti@rpmtlc.it:CAROLINAPIANTA", "Nicesweetboobs:1983-10-05:happy.house@outlook.com:ilovekiss", "190.40.252.191,XabelciberX,abelciber@latinmail.com,gatita9685567", "201.245.164.50,andres vergara,anfeveres@hotmail.com,barcelona10", "65.94.11.229,stephane,fraisinoo@hotmail.com,ste264", "INLOVE12:::1920-05-02:MENDHER4LIFE@yahoo.com:INLOVE12", "agaliha84:::1969-07-02:jumbalaya684@privacyharbor.com:agaliha84", "happy8360:::1963-09-12:shabby407@yahoo.com:jdj407", "tinkertailor99:1947-10-12:terry@anymouse.com:77880577", "Cash5178:1970-11-06:littlejohn2dajr@yahoo.com:hulk1234", "Creecher0275:1972-04-22:creech.peter@yahoo.com:complete", "Katiya_ivanova1997@mail.ru:Katiya_ivanova1997@mail.ru;97tata1", "krasotka.1.zwezda@mail.ru:krasotka.1.zwezda@mail.ru;zwezda", "SavvySummer:1973-03-17:savvysummer1@gmail.com:sunshine0699", "RaWRrr:1990-12-02:ogaboga_12@hotmail.com:nitsua", "piabersas@libero.it;stefano.ripamonti@rpmtlc.it:CAROLINAPIANTA", "raffaele@puntolingue.it;info@hotelbrumansalerno.it:RRAHOTEL", "silent4463:1980-10-14:yancey.robert10@yahoo.com:salinas", ] for multi_line in multi_lines: self.assertIsNotNone(p(multi_line)) self.assertIsNone( p( "300396 matelymaly rune_scape_player@hotmail.com 222.155.173.78 " "3d2c5414a041f518b03b750e62e4ebc3:Nhc" ) ) # 32-char hex is a hash, not junk: kept (typed) so `crack` can attack it. hashed = p( "05-02-2012;5721869;melanie2032003@yahoo.fr:f02368945726d5fc2a14eb576f7276c0" ) self.assertIsNotNone(hashed) self.assertEqual(PasswordType.MD5, hashed[2]) self.assertIsNotNone(p("diet3rix@gmail.com::g1u3ck")) self.assertIsNotNone(p("asuss_85@mail.ru:asuss_85@mail.ru:2904198")) self.assertIsNotNone(p("sanda ostojic.todor@gmail.com:vasafultv")) self.assertIsNone(p("jsjjd.@Com.:love melon")) def test_parse_2(self): self.assertEqual("j/o/s", get_output_file("josemariacanyero@hotmail.com")) self.assertEqual("c/e/o", get_output_file("ceo21w@gmail.com")) self.assertEqual("x/symbols", get_output_file("x_fear_238@hotmail.fr")) self.assertEqual("x/a/symbols", get_output_file("xa_fear_238@hotmail.fr")) self.assertEqual("x/symbols", get_output_file("x@hotmail.com")) self.assertEqual("k/e/v", get_output_file("kevmedic13@yahoo.com")) if __name__ == "__main__": unittest.main()