【问题标题】:Whois search for public IP on a csv file using bash scriptWhois 使用 bash 脚本在 csv 文件上搜索公共 IP
【发布时间】:2020-05-15 04:02:29
【问题描述】:

我有一份公网 IP 地址列表的 csv 文件格式的每日报告,我需要填写公网 IP 的主机名。主机名可以是 OrgId 或网络名。

我需要编写一个 bash 脚本来自动执行 whois 搜索,而不是手动逐个搜索并将其填充到 csv 文件中。

示例:这是一长串公共 IP 地址的摘录

    Port,Type,S_Host,S_IP,Port,D_Host,D_IP,Port
    2,tcp,N/A,8.8.8.8,2,N/A,47.246.57.232,8
    3,tcp,N/A,47.246.57.232,2,N/A,217.17.81.9,3

我需要对第 4 列和第 7 列中的 IP 进行 whois 搜索,然后在字段 3 和 6 中填写主机名。

期望的输出:

Port,Type,S_Host,S_IP,Port,D_Host,D_IP,Port
2,tcp,Google,8.8.8.8,2,Alibaba,47.246.57.232,8
3,tcp,Alibaba,47.246.57.232,2,MVTV,217.17.81.9,3

【问题讨论】:

    标签: bash csv


    【解决方案1】:

    一种非常简单的方法是读取 IP 地址列表(即pubIP.lst)并将其写入一个新文件,但使用已解析的主机名(即hosts.lst)。

    #!/bin/bash
    
    resolveHostname() {
      # You may change or extend this function to your needs
      dig -x "$1" +short
    }
    
    # Make sure there is no file with resolved hostnames
    rm hosts.lst
    
    while read LINE; # by line from a list
    do
    
      # Each Comma Separated Value (CSV) into a variable
    
      PORT=$(echo "${LINE}" | cut -d "," -f 1)
      TYPE=$(echo "${LINE}" | cut -d "," -f 2)
    
      # SRC_HOST=$(echo "${LINE}" | cut -d "," -f 3)
      SRC_IP=$(echo "${LINE}" | cut -d "," -f 4)
      SRC_PORT=$(echo "${LINE}" | cut -d "," -f 5)
    
      # DEST_HOST=$(echo "${LINE}" | cut -d "," -f 6)
      DEST_IP=$(echo "${LINE}" | cut -d "," -f 7)
      DEST_PORT=$(echo "${LINE}" | cut -d "," -f 8)
    
      # And write it out the columns into a new file
      # but for Col 3,6 with hostnames instead of IP
    
      echo "${PORT},${TYPE},$(resolveHostname ${SRC_IP}),${SRC_IP},${SRC_PORT},$(resolveHostname ${DEST_IP}),${DEST_IP},${DEST_PORT}" >> hosts.lst
    
    done < pubIP.lst
    

    感谢

    【讨论】:

    • 我相信 'dig -x "$1" +short' 指的是第一列?如果我错了,请纠正我。
    • 您可以查看passing parameters to a Bash function。我会将其包含在学分中。通常,功能块resolveHostname 将采用给定的SRC_IPDEST_IP,将其解析为主机名并打印出来。因此,这将取决于您将输入的参数以及您将在何处拥有打印输出的功能。
    • 好的,知道了。谢谢!
    • 我在使用这个解决方案时遇到了另一个问题。该命令也匹配所有私有 IP 地址。我可以添加什么以使其仅与公共 IP 匹配?此外,包括标题在内的列中的其他值返回空。如果它不匹配任何内容,我想保留列中的值。我该怎么做?
    猜你喜欢
    • 2012-03-07
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 2011-02-17
    相关资源
    最近更新 更多