| 325 | |
| 326 | |
| 327 | class CsNetfilter(object): |
| 328 | |
| 329 | def __init__(self): |
| 330 | self.rule = {} |
| 331 | self.table = '' |
| 332 | self.chain = '' |
| 333 | self.seen = False |
| 334 | self.count = 0 |
| 335 | |
| 336 | def parse(self, rule): |
| 337 | self.rule = self.__convert_to_dict(rule) |
| 338 | |
| 339 | def unseen(self): |
| 340 | return self.seen is False |
| 341 | |
| 342 | def mark_seen(self): |
| 343 | self.seen = True |
| 344 | |
| 345 | def __convert_to_dict(self, rule): |
| 346 | rule = str(rule.lstrip()) |
| 347 | rule = rule.replace('! -', '!_-') |
| 348 | rule = rule.replace('-p all', '') |
| 349 | rule = rule.replace(' ', ' ') |
| 350 | rule = rule.replace('bootpc', '68') |
| 351 | # Ugly hack no.23 split this or else I will have an odd number of parameters |
| 352 | rule = rule.replace('--checksum-fill', '--checksum fill') |
| 353 | # -m can appear twice in a string |
| 354 | rule = rule.replace('-m state', '-m2 state') |
| 355 | rule = rule.replace('ESTABLISHED,RELATED', 'RELATED,ESTABLISHED') |
| 356 | bits = rule.split(' ') |
| 357 | rule = dict(list(zip(bits[0::2], bits[1::2]))) |
| 358 | if "-A" in list(rule.keys()): |
| 359 | self.chain = rule["-A"] |
| 360 | return rule |
| 361 | |
| 362 | def set_table(self, table): |
| 363 | if table == '': |
| 364 | table = "filter" |
| 365 | self.table = table |
| 366 | |
| 367 | def get_table(self): |
| 368 | return self.table |
| 369 | |
| 370 | def set_chain(self, chain): |
| 371 | self.chain = chain |
| 372 | |
| 373 | def set_count(self, count=0): |
| 374 | self.count = count |
| 375 | |
| 376 | def get_count(self): |
| 377 | return self.count |
| 378 | |
| 379 | def get_chain(self): |
| 380 | return self.chain |
| 381 | |
| 382 | def get_rule(self): |
| 383 | return self.rule |
| 384 |
no outgoing calls