以ip:port格式解析工作“ masscan”的结果

时间:2018-12-24 22:22:11

标签: python regex parsing

我开始学习编程,我试图编写一个简单的解析器,但是我很困惑。如果有人帮助我,我会很高兴。

mres.txt

# Masscan 1.0.3 scan initiated Sun Dec 23 23:00:31 2018
# Ports scanned: TCP(1;80-80) UDP(0;) SCTP(0;) PROTOCOLS(0;)
Host: 192.168.1.1 ()    Ports: 80/open/tcp////
Host: 192.168.1.1 ()    Ports: 801/open/tcp////
Host: 192.168.1.2 ()    Ports: 801/open/tcp////
Host: 192.168.1.2 ()    Ports: 445/open/tcp////
Host: 192.168.1.3 ()    Ports: 80/open/tcp////
Host: 192.168.1.3 ()    Ports: 8080/open/tcp////
Host: 192.168.1.3 ()    Ports: 21/open/tcp////
# Masscan done at Sun Dec 23 23:00:45 2018

我想接收以下格式的数据:

192.168.1.1 80, 801
192.168.1.2 801, 445
192.168.1.3 80, 8080, 21

script.py

#!/usr/bin/env python
import sys, re, os

ports = []
ip = None

with open('mres.txt','r') as f:

for elem in f.readlines():

    if not elem.startswith('#'):
          if ip != None:
              if elem.split(' ')[1] == ip:
                  ports.append(elem.split(' ')[3].split('/')[0])
                  continue
              else:
                  print(ip + str(ports))
                  ports=[]
          else:
              #print('Unic: '+str(ip) + ' port: '+ str(elem.split(' ')[3].split('/')[0]))
              ip = elem.split(' ')[1]
              ports.append(elem.split(' ')[3].split('/')[0]) 

2 个答案:

答案 0 :(得分:0)

您最好使用dict处理数据: 1)IP可能是Dict的关键 2)列表可以是Dict中的值。

如果需要,我可以为您创建示例代码。

答案 1 :(得分:0)

这将处理您的数据,并输出所需的输出。我已经在下面的评论中尽力解释了它,但是请问任何不清楚的问题。

public function isActualModuloClass() {
  $modulo = new Foo(5);
  $modulo_float = new Foo(2.3);
  assert($modulo->value == 5, "Integer modulo constructor works");
  assert($modulo_float->value == 2, "Float modulo casts to integer properly");
  assert($modulo->getRemainder(5) == 0, "Modulo 5%5 is 0");
  assert($modulo->getRemainder(4) == 1, "Modulo 5%4 is 1");
}