Передайте значение json через скрипт и замените его на вывод - PullRequest
1 голос
/ 11 октября 2019

Я пытаюсь внедрить диапазоны IP-адресов в SolarWinds с меткой в ​​каждой группе диапазонов IP-адресов, связанных со службой, которую я хочу пометить. Хотя я чувствую, что должен быть гораздо лучший способ сделать это, потому что в конечном итоге он должен быть в формате XML.

<AddressGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/IPAddressGroupsSchema.xsd">
  <AddressGroup enabled="true" description="Example">
    <Range from="13.107.6.152" to="13.107.6.153" />
  </AddressGroup>
  <AddressGroup enabled="true" description="Example 2">
    <Range from="150.224.0.0" to="150.224.131.255" />
    <Range from="150.224.140.0" to="150.224.255.255" />
  </AddressGroup>

По сути, у меня есть файл JSON, который я вытащил всененужная информация. Я не могу проглотить адреса CIDR, поэтому у меня есть скрипт Go, который преобразует нотацию CIDR в диапазон IP-адресов.

{
  "ips": [
    "13.107.6.152/31",
    "13.107.18.10/31",
    "13.107.128.0/22",
    "23.103.160.0/20",
    "40.96.0.0/13",
    "40.104.0.0/15",
    "52.96.0.0/14",
    "131.253.33.215/32",
    "132.245.0.0/16",
    "150.171.32.0/22",
    "191.234.140.0/22",
    "204.79.197.215/32",
    "2603:1006::/40",
    "2603:1016::/40",
    "2603:1026::/40",
    "2603:1026:200::/39",
    "2603:1026:400::/39",
    "2603:1026:600::/44",
    "2603:1026:620::/44",
    "2603:1026:800::/44",
    "2603:1026:820::/45",
    "2603:1036::/39",
    "2603:1036:200::/40",
    "2603:1036:400::/40",
    "2603:1036:600::/40",
    "2603:1036:800::/38",
    "2603:1036:c00::/40",
    "2603:1046::/37",
    "2603:1046:900::/40",
    "2603:1056::/40",
    "2603:1056:400::/40",
    "2603:1056:600::/40",
    "2603:1096::/38",
    "2603:1096:400::/40",
    "2603:1096:600::/40",
    "2603:1096:a00::/39",
    "2603:1096:c00::/40",
    "2603:10a6:200::/40",
    "2603:10a6:400::/40",
    "2603:10a6:600::/40",
    "2603:10a6:800::/40",
    "2603:10d6:200::/40",
    "2620:1ec:4::152/128",
    "2620:1ec:4::153/128",
    "2620:1ec:c::10/128",
    "2620:1ec:c::11/128",
    "2620:1ec:d::10/128",
    "2620:1ec:d::11/128",
    "2620:1ec:8f0::/46",
    "2620:1ec:900::/46",
    "2620:1ec:a92::152/128",
    "2620:1ec:a92::153/128",
    "2a01:111:f400::/48"
  ],
  "serviceArea": "Exchange",
  "serviceAreaDisplayName": "Exchange Online"
}

Есть еще несколько из них, но я стремлюсь сделать это через циклвсе ips, передайте каждый из них через cidrls (сценарий преобразования cidr) и замените их на выходной диапазон ip.

jq -r '.ips[]' msftServices.json | xargs -n1 cidrls

Вывод выглядит следующим образом, 13.107.128.0 - 13.107.131.255

1 Ответ

0 голосов
/ 11 октября 2019

Не уверен, что это то, что вам нужно, но это сгенерирует все необходимые <Range> элементы:

jq -r '.ips[]' msftServices.json | xargs -n1 cidrls | while read lower ignore upper; do echo "<Range from=\"$lower\" to=\"$upper\" />"; done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...