为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

万千封印 2021-09-24 16:09:20
我开始学习编程,我正在尝试编写一个简单的解析器,但我很困惑。如果有人帮助我,我会很高兴。文件.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, 801192.168.1.2 801, 445192.168.1.3 80, 8080, 21脚本文件#!/usr/bin/env pythonimport sys, re, osports = []ip = Nonewith 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 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

你最好使用dict来处理数据:1)IP可以是Dict中的key 2)List可以是Dict中的值。

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


查看完整回答
反对 回复 2021-09-24
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

这将操作您的数据,并打印您想要的输出。我已经尝试在下面的评论中尽可能地解释它,但请提出任何不清楚的问题。


from collections import defaultdict

import socket


# build a dictionary of ip -> set of ports

# default dict is cool becasue if the key doesn't exist when accessed,

# it will create it with a default value (in this case a set)

# I'm using a set because I don't want to add the same port twice

ip_to_ports = defaultdict(set)


with open('mres.txt') as fp:

    for line in fp:

        # grab only the lines we're interested in

        if line.startswith('Host:'):

            parts = line.strip().split()

            ip = parts[1]

            port = parts[-1]

            # split it by '/' and grab the first element

            port = port.split('/')[0]


            # add ip and ports to our defaultdict

            # if the ip isn't in the defaultdict, it will be created with

            # an empty set, that we can add the port to.

            # if we run into the same port twice, 

            # the second entry will be ignored.

            ip_to_ports[ip].add(port)


# sort the keys in ip_to_ports by increasing address

for ip in sorted(ip_to_ports, key=socket.inet_aton):

    # sort the ports too

    ports = sorted(ip_to_ports[ip])

    # create a string and print

    ports = ', '.join(ports)

    print(ip, ports)


查看完整回答
反对 回复 2021-09-24
  • 2 回答
  • 0 关注
  • 261 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号