<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic System - Engine - Logs - CIDR is not a valid IP indicator ERROR in General Topics</title>
    <link>https://live.paloaltonetworks.com/t5/general-topics/system-engine-logs-cidr-is-not-a-valid-ip-indicator-error/m-p/354131#M95541</link>
    <description>&lt;P&gt;When I try to integrate minemeld IOCs into MDATP, only IP can't sync to the MDATP. Domain/URL and SHA256 are all good.&lt;/P&gt;&lt;P&gt;Check the Logs in System-Engine, found following errors, but don't understand why have this error?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;2020-10-05T15:57:27 (10424)node._push_indicators ERROR: Microsoft-Defender-ATP-IP: error submitting indicator 101.231.124.6/32: Cidr is not a valid IP indicator. Indicator value: $101.231.124.6/32&lt;BR /&gt;2020-10-05T15:57:27 (10424)node._push_indicators ERROR: Microsoft-Defender-ATP-IP: error submitting indicator 103.111.83.246/32: Cidr is not a valid IP indicator. Indicator value: $103.111.83.246/32&lt;BR /&gt;2020-10-05T15:57:27 (10424)node._push_indicators ERROR: Microsoft-Defender-ATP-IP: error submitting indicator 103.12.161.194/32: Cidr is not a valid IP indicator. Indicator value: $103.12.161.194/32&lt;BR /&gt;2020-10-05T15:57:27 (10424)node._push_indicators ERROR: Microsoft-Defender-ATP-IP: error submitting indicator 103.194.90.242/32: Cidr is not a valid IP indicator. Indicator value: $103.194.90.242/32&lt;/P&gt;&lt;P&gt;...&lt;/P&gt;</description>
    <pubDate>Mon, 05 Oct 2020 19:51:31 GMT</pubDate>
    <dc:creator>HAO.BAN</dc:creator>
    <dc:date>2020-10-05T19:51:31Z</dc:date>
    <item>
      <title>System - Engine - Logs - CIDR is not a valid IP indicator ERROR</title>
      <link>https://live.paloaltonetworks.com/t5/general-topics/system-engine-logs-cidr-is-not-a-valid-ip-indicator-error/m-p/354131#M95541</link>
      <description>&lt;P&gt;When I try to integrate minemeld IOCs into MDATP, only IP can't sync to the MDATP. Domain/URL and SHA256 are all good.&lt;/P&gt;&lt;P&gt;Check the Logs in System-Engine, found following errors, but don't understand why have this error?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;2020-10-05T15:57:27 (10424)node._push_indicators ERROR: Microsoft-Defender-ATP-IP: error submitting indicator 101.231.124.6/32: Cidr is not a valid IP indicator. Indicator value: $101.231.124.6/32&lt;BR /&gt;2020-10-05T15:57:27 (10424)node._push_indicators ERROR: Microsoft-Defender-ATP-IP: error submitting indicator 103.111.83.246/32: Cidr is not a valid IP indicator. Indicator value: $103.111.83.246/32&lt;BR /&gt;2020-10-05T15:57:27 (10424)node._push_indicators ERROR: Microsoft-Defender-ATP-IP: error submitting indicator 103.12.161.194/32: Cidr is not a valid IP indicator. Indicator value: $103.12.161.194/32&lt;BR /&gt;2020-10-05T15:57:27 (10424)node._push_indicators ERROR: Microsoft-Defender-ATP-IP: error submitting indicator 103.194.90.242/32: Cidr is not a valid IP indicator. Indicator value: $103.194.90.242/32&lt;/P&gt;&lt;P&gt;...&lt;/P&gt;</description>
      <pubDate>Mon, 05 Oct 2020 19:51:31 GMT</pubDate>
      <guid>https://live.paloaltonetworks.com/t5/general-topics/system-engine-logs-cidr-is-not-a-valid-ip-indicator-error/m-p/354131#M95541</guid>
      <dc:creator>HAO.BAN</dc:creator>
      <dc:date>2020-10-05T19:51:31Z</dc:date>
    </item>
    <item>
      <title>Re: System - Engine - Logs - CIDR is not a valid IP indicator ERROR</title>
      <link>https://live.paloaltonetworks.com/t5/general-topics/system-engine-logs-cidr-is-not-a-valid-ip-indicator-error/m-p/354616#M95542</link>
      <description>&lt;P&gt;I found this one:&lt;/P&gt;&lt;P&gt;&lt;A href="https://docs.microsoft.com/en-us/windows/security/threat-protection/microsoft-defender-atp/indicator-ip-domain" target="_blank"&gt;https://docs.microsoft.com/en-us/windows/security/threat-protection/microsoft-defender-atp/indicator-ip-domain&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="2020-10-06_17-47-26.jpg" style="width: 951px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/28116i8716093CD1E83DBD/image-size/large/is-moderation-mode/true?v=v2&amp;amp;px=999" role="button" title="2020-10-06_17-47-26.jpg" alt="2020-10-06_17-47-26.jpg" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;And this article was published on 09/22/2020.&amp;nbsp; Does it mean Microsoft just changed it and the prototype was stale?&lt;/P&gt;</description>
      <pubDate>Wed, 07 Oct 2020 00:08:52 GMT</pubDate>
      <guid>https://live.paloaltonetworks.com/t5/general-topics/system-engine-logs-cidr-is-not-a-valid-ip-indicator-error/m-p/354616#M95542</guid>
      <dc:creator>HAO.BAN</dc:creator>
      <dc:date>2020-10-07T00:08:52Z</dc:date>
    </item>
    <item>
      <title>Re: System - Engine - Logs - CIDR is not a valid IP indicator ERROR</title>
      <link>https://live.paloaltonetworks.com/t5/general-topics/system-engine-logs-cidr-is-not-a-valid-ip-indicator-error/m-p/354959#M95543</link>
      <description>&lt;P&gt;I figure out the workaround, but need to modify the &lt;EM&gt;&lt;STRONG&gt;&lt;FONT color="#FF0000"&gt;node.py&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/EM&gt; which is under "/opt/minemeld/local/library/334079e8-24c8-40ed-9285-c914d4aef458/microsoft_wd_atp"&lt;/P&gt;&lt;P&gt;Search "cidr" can locate the code fast. The original code can be found on GitHub: &lt;A href="https://github.com/PaloAltoNetworks/minemeld-wd-atp" target="_blank"&gt;https://github.com/PaloAltoNetworks/minemeld-wd-atp&lt;/A&gt;&lt;/P&gt;&lt;P&gt;Following is the code. Before the change don't forget to backup the original one. I'm not sure the .pyc is necessary or not. But just use " python -m py_compile node.py" to generate it. Restart the Engine, I haven't seen any error code in logs, and the IP can be sync to MDATP now.&lt;/P&gt;&lt;TABLE border="1" width="100%"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD width="100%"&gt;&lt;P&gt;import logging&lt;BR /&gt;import os&lt;BR /&gt;import shutil&lt;BR /&gt;import time&lt;BR /&gt;import uuid&lt;BR /&gt;import netaddr&lt;BR /&gt;from datetime import datetime, timedelta&lt;BR /&gt;from collections import deque&lt;/P&gt;&lt;P&gt;import adal #pylint: disable=E0401&lt;BR /&gt;import gevent&lt;BR /&gt;import requests&lt;BR /&gt;import yaml&lt;BR /&gt;import ujson as json&lt;BR /&gt;from gevent.queue import Queue, Empty, Full&lt;BR /&gt;from netaddr import IPNetwork&lt;BR /&gt;from requests.exceptions import RequestException, HTTPError&lt;/P&gt;&lt;P&gt;from minemeld.ft import ft_states #pylint: disable=E0401&lt;BR /&gt;from minemeld.ft.base import _counting #pylint: disable=E0401&lt;BR /&gt;from minemeld.ft.actorbase import ActorBaseFT #pylint: disable=E0401&lt;BR /&gt;from minemeld.ft.table import Table #pylint: disable=E0401&lt;/P&gt;&lt;P&gt;LOG = logging.getLogger(__name__)&lt;BR /&gt;AUTHORITY_BASE_URL = '&lt;A href="https://login.microsoftonline.com" target="_blank"&gt;https://login.microsoftonline.com&lt;/A&gt;'&lt;BR /&gt;AUTHORITY_URL = '&lt;A href="https://login.microsoftonline.com/" target="_blank"&gt;https://login.microsoftonline.com/&lt;/A&gt;{}'&lt;BR /&gt;RESOURCE = '&lt;A href="https://securitycenter.onmicrosoft.com/windowsatpservice" target="_blank"&gt;https://securitycenter.onmicrosoft.com/windowsatpservice&lt;/A&gt;'&lt;BR /&gt;ENDPOINT_URL = '&lt;A href="https://partnerstifrontend-eus-prd.trafficmanager.net/threatintel/info" target="_blank"&gt;https://partnerstifrontend-eus-prd.trafficmanager.net/threatintel/info&lt;/A&gt;'&lt;/P&gt;&lt;P&gt;MM_2_WDATP_TYPE = {&lt;BR /&gt;'sha1': 'FileSha1',&lt;BR /&gt;'sha256': 'FileSha256',&lt;BR /&gt;'IPv4': 'IpAddress',&lt;BR /&gt;'domain': 'DomainName',&lt;BR /&gt;'URL': 'Url'&lt;BR /&gt;}&lt;BR /&gt;WD_ATP_TIINDICATORS_ENDPOINT = '&lt;A href="https://api.securitycenter.windows.com/api/indicators/import" target="_blank"&gt;https://api.securitycenter.windows.com/api/indicators/import&lt;/A&gt;'&lt;/P&gt;&lt;P&gt;class AuthConfigException(RuntimeError):&lt;BR /&gt;pass&lt;/P&gt;&lt;P&gt;class WDATPResponseException(RuntimeError):&lt;BR /&gt;pass&lt;/P&gt;&lt;P&gt;class Output(ActorBaseFT):&lt;BR /&gt;def __init__(self, name, chassis, config):&lt;BR /&gt;self._queue = None&lt;/P&gt;&lt;P&gt;super(Output, self).__init__(name, chassis, config)&lt;/P&gt;&lt;P&gt;self._push_glet = None&lt;BR /&gt;self._checkpoint_glet = None&lt;BR /&gt;self.api_client_id = str(uuid.uuid4())&lt;BR /&gt;self.sequence_number = 0&lt;/P&gt;&lt;P&gt;def configure(self):&lt;BR /&gt;super(Output, self).configure()&lt;/P&gt;&lt;P&gt;self.queue_maxsize = int(self.config.get('queue_maxsize', 100000))&lt;BR /&gt;if self.queue_maxsize == 0:&lt;BR /&gt;self.queue_maxsize = None&lt;BR /&gt;self._queue = Queue(maxsize=self.queue_maxsize)&lt;/P&gt;&lt;P&gt;self.client_id = self.config.get('client_id', None)&lt;BR /&gt;self.client_secret = self.config.get('client_secret', None)&lt;BR /&gt;self.tenant_id = self.config.get('tenant_id', None)&lt;/P&gt;&lt;P&gt;self.sender_id = self.config.get('sender_id', 'minemeld')&lt;/P&gt;&lt;P&gt;self.side_config_path = self.config.get('side_config', None)&lt;BR /&gt;if self.side_config_path is None:&lt;BR /&gt;self.side_config_path = os.path.join(&lt;BR /&gt;os.environ['MM_CONFIG_DIR'],&lt;BR /&gt;'%s_side_config.yml' % self.name&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;self._load_side_config()&lt;/P&gt;&lt;P&gt;def _load_side_config(self):&lt;BR /&gt;try:&lt;BR /&gt;with open(self.side_config_path, 'r') as f:&lt;BR /&gt;sconfig = yaml.safe_load(f)&lt;/P&gt;&lt;P&gt;except Exception as e:&lt;BR /&gt;LOG.error('%s - Error loading side config: %s', self.name, str(e))&lt;BR /&gt;return&lt;/P&gt;&lt;P&gt;client_id = sconfig.get('client_id', None)&lt;BR /&gt;if client_id is not None:&lt;BR /&gt;self.client_id = client_id&lt;BR /&gt;LOG.info('{} - client_id set'.format(self.name))&lt;/P&gt;&lt;P&gt;client_secret = sconfig.get('client_secret', None)&lt;BR /&gt;if client_secret is not None:&lt;BR /&gt;self.client_secret = client_secret&lt;BR /&gt;LOG.info('{} - client_secret set'.format(self.name))&lt;/P&gt;&lt;P&gt;tenant_id = sconfig.get('tenant_id', None)&lt;BR /&gt;if tenant_id is not None:&lt;BR /&gt;self.tenant_id = tenant_id&lt;BR /&gt;LOG.info('{} - tenant_id set'.format(self.name))&lt;/P&gt;&lt;P&gt;def _saved_state_restore(self, saved_state):&lt;BR /&gt;super(Output, self)._saved_state_restore(saved_state)&lt;/P&gt;&lt;P&gt;self.api_client_id = saved_state.get('api_client_id', None)&lt;BR /&gt;self.sequence_number = saved_state.get('sequence_number', None)&lt;/P&gt;&lt;P&gt;LOG.info('{} - saved state: api_client_id: {} sequence_number: {}'.format(&lt;BR /&gt;self.name,&lt;BR /&gt;self.api_client_id,&lt;BR /&gt;self.sequence_number&lt;BR /&gt;))&lt;/P&gt;&lt;P&gt;def _saved_state_create(self):&lt;BR /&gt;sstate = super(Output, self)._saved_state_create()&lt;/P&gt;&lt;P&gt;sstate['api_client_id'] = self.api_client_id&lt;BR /&gt;sstate['sequence_number'] = self.sequence_number&lt;/P&gt;&lt;P&gt;return sstate&lt;/P&gt;&lt;P&gt;def _saved_state_reset(self):&lt;BR /&gt;super(Output, self)._saved_state_reset()&lt;/P&gt;&lt;P&gt;self.api_client_id = str(uuid.uuid4())&lt;BR /&gt;self.sequence_number = 0&lt;/P&gt;&lt;P&gt;def connect(self, inputs, output):&lt;BR /&gt;output = False&lt;BR /&gt;super(Output, self).connect(inputs, output)&lt;/P&gt;&lt;P&gt;def initialize(self):&lt;BR /&gt;pass&lt;/P&gt;&lt;P&gt;def rebuild(self):&lt;BR /&gt;pass&lt;/P&gt;&lt;P&gt;def reset(self):&lt;BR /&gt;pass&lt;/P&gt;&lt;P&gt;def _get_auth_token(self):&lt;BR /&gt;if self.client_id is None:&lt;BR /&gt;LOG.error('{} - client_id not set'.format(self.name))&lt;BR /&gt;raise AuthConfigException('{} - client_id not set'.format(self.name))&lt;BR /&gt;if self.client_secret is None:&lt;BR /&gt;LOG.error('{} - client_secret not set'.format(self.name))&lt;BR /&gt;raise AuthConfigException('{} - client_secret not set'.format(self.name))&lt;BR /&gt;if self.tenant_id is None:&lt;BR /&gt;LOG.error('{} - tenant_id not set'.format(self.name))&lt;BR /&gt;raise AuthConfigException('{} - tenant_id not set'.format(self.name))&lt;/P&gt;&lt;P&gt;context = adal.AuthenticationContext(&lt;BR /&gt;AUTHORITY_URL.format(self.tenant_id),&lt;BR /&gt;validate_authority=self.tenant_id != 'adfs',&lt;BR /&gt;api_version=None&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;token = context.acquire_token_with_client_credentials(&lt;BR /&gt;RESOURCE,&lt;BR /&gt;self.client_id,&lt;BR /&gt;self.client_secret&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;if token is None or 'accessToken' not in token:&lt;BR /&gt;LOG.error('{} - Invalid token or accessToken not available'.format(self.name))&lt;BR /&gt;raise RuntimeError('{} - Invalid token or accessToken not available'.format(self.name))&lt;/P&gt;&lt;P&gt;return token['accessToken']&lt;/P&gt;&lt;P&gt;def _get_endpoint_orgid(self, token):&lt;BR /&gt;# this should look like&lt;BR /&gt;# {&lt;BR /&gt;# u'AadTenantId': u'bb19bb5c-0e8d-4a73-bd6b-d015b298ecd7',&lt;BR /&gt;# u'ServiceUri': u'&lt;A href="https://partnerstifrontend-eus-prd.trafficmanager.net/threatintel/indicators" target="_blank"&gt;https://partnerstifrontend-eus-prd.trafficmanager.net/threatintel/indicators&lt;/A&gt;',&lt;BR /&gt;# u'ServiceType': 1,&lt;BR /&gt;# u'WdAtpOrgId': u'55c01df7-a1eb-4eae-ae3b-a9b423d07d72'&lt;BR /&gt;# }&lt;BR /&gt;result = requests.get(&lt;BR /&gt;ENDPOINT_URL,&lt;BR /&gt;headers={&lt;BR /&gt;'Authorization': 'Bearer {}'.format(token),&lt;BR /&gt;'Content-Type': 'application/json'&lt;BR /&gt;}&lt;BR /&gt;)&lt;BR /&gt;result.raise_for_status()&lt;/P&gt;&lt;P&gt;result = result.json()&lt;BR /&gt;LOG.debug('{} - endpoints: {}'.format(self.name, result))&lt;/P&gt;&lt;P&gt;if result.get('AadTenantId', None) != self.tenant_id:&lt;BR /&gt;raise AuthConfigException('{} - Endpoint response AadTenantId differs from tenant_id: {}'.format(self.name, result))&lt;/P&gt;&lt;P&gt;endpoint = result.get('ServiceUri', None)&lt;BR /&gt;if endpoint is None:&lt;BR /&gt;raise AuthConfigException('{} - Endpoint response missing ServiceUri field: {}'.format(self.name, result))&lt;/P&gt;&lt;P&gt;org_id = result.get('WdAtpOrgId', None)&lt;BR /&gt;if endpoint is None:&lt;BR /&gt;raise AuthConfigException('{} - Endpoint response missing WdAtpOrgId field: {}'.format(self.name, result))&lt;/P&gt;&lt;P&gt;return endpoint, org_id&lt;/P&gt;&lt;P&gt;def _push_indicators(self, token, endpoint, org_id, indicators):&lt;BR /&gt;# DEPRECATED&lt;/P&gt;&lt;P&gt;# message = {&lt;BR /&gt;# 'Id': self.api_client_id,&lt;BR /&gt;# 'SequenceNumber': self.sequence_number,&lt;BR /&gt;# 'SenderId': self.sender_id,&lt;BR /&gt;# 'Indicators': list(indicators),&lt;BR /&gt;# 'WdAtpOrgId': org_id&lt;BR /&gt;# }&lt;/P&gt;&lt;P&gt;# LOG.debug(message)&lt;/P&gt;&lt;P&gt;# result = requests.post(&lt;BR /&gt;# endpoint,&lt;BR /&gt;# headers={&lt;BR /&gt;# 'Content-Type': 'application/json',&lt;BR /&gt;# 'Authorization': 'Bearer {}'.format(token)&lt;BR /&gt;# },&lt;BR /&gt;# json=message&lt;BR /&gt;# )&lt;/P&gt;&lt;P&gt;# LOG.debug(result.text)&lt;/P&gt;&lt;P&gt;# result.raise_for_status()&lt;BR /&gt;raise WDATPResponseException('This output node is deprecated: please switch to OutputBatch')&lt;/P&gt;&lt;P&gt;def _push_loop(self):&lt;BR /&gt;while True:&lt;BR /&gt;msg = self._queue.get()&lt;/P&gt;&lt;P&gt;artifacts = deque()&lt;BR /&gt;artifacts.append(msg)&lt;/P&gt;&lt;P&gt;try:&lt;BR /&gt;while len(artifacts) &amp;lt; 511:&lt;BR /&gt;artifacts.append(self._queue.get_nowait())&lt;BR /&gt;except Empty:&lt;BR /&gt;pass&lt;/P&gt;&lt;P&gt;while True:&lt;BR /&gt;result = None&lt;/P&gt;&lt;P&gt;try:&lt;BR /&gt;LOG.info('{} - Sending {}:{}'.format(self.name, self.api_client_id, self.sequence_number))&lt;BR /&gt;# DEPRECATED - no need to get the token&lt;BR /&gt;# token = self._get_auth_token()&lt;BR /&gt;token = 'DEPRECATED'&lt;BR /&gt;LOG.debug('{} - token: {}'.format(self.name, token))&lt;/P&gt;&lt;P&gt;# DEPRECATED&lt;BR /&gt;#endpoint, org_id = self._get_endpoint_orgid(token)&lt;BR /&gt;#LOG.debug('{} - endpoint: {} WdAtpOrgId: {}'.format(self.name, endpoint, org_id))&lt;/P&gt;&lt;P&gt;# self._push_indicators(&lt;BR /&gt;# token=token,&lt;BR /&gt;# endpoint=endpoint,&lt;BR /&gt;# org_id=org_id,&lt;BR /&gt;# indicators=artifacts&lt;BR /&gt;# )&lt;BR /&gt;self._push_indicators(None, None, None, None)&lt;/P&gt;&lt;P&gt;self.sequence_number += 1&lt;BR /&gt;self.statistics['indicator.tx'] += len(artifacts)&lt;BR /&gt;break&lt;/P&gt;&lt;P&gt;except gevent.GreenletExit:&lt;BR /&gt;return&lt;/P&gt;&lt;P&gt;except RequestException as e:&lt;BR /&gt;LOG.error('{} - error submitting indicators - {}'.format(self.name, str(e)))&lt;/P&gt;&lt;P&gt;if result is not None and result.status_code &amp;gt;= 400 and result.status_code &amp;lt; 500:&lt;BR /&gt;LOG.error('{}: error in request - {}'.format(self.name, result.text))&lt;BR /&gt;self.statistics['error.invalid_request'] += 1&lt;BR /&gt;break&lt;/P&gt;&lt;P&gt;self.statistics['error.submit'] += 1&lt;BR /&gt;gevent.sleep(60)&lt;/P&gt;&lt;P&gt;except AuthConfigException as e:&lt;BR /&gt;LOG.exception('{} - Error submitting indicators - {}'.format(self.name, str(e)))&lt;BR /&gt;self.statistics['error.submit'] += 1&lt;BR /&gt;gevent.sleep(60.0)&lt;/P&gt;&lt;P&gt;except WDATPResponseException as e:&lt;BR /&gt;LOG.exception('{} - error submitting indicators - {}'.format(self.name, str(e)))&lt;BR /&gt;self.statistics['error.submit'] += 1&lt;BR /&gt;break&lt;/P&gt;&lt;P&gt;except Exception as e:&lt;BR /&gt;LOG.exception('{} - error submitting indicators - {}'.format(self.name, str(e)))&lt;BR /&gt;self.statistics['error.submit'] += 1&lt;BR /&gt;gevent.sleep(120.0)&lt;/P&gt;&lt;P&gt;gevent.sleep(0.1)&lt;/P&gt;&lt;P&gt;def _encode_indicator(self, indicator, value, expired=False):&lt;BR /&gt;type_ = value['type']&lt;/P&gt;&lt;P&gt;description = '{} indicator from {}'.format(&lt;BR /&gt;type_,&lt;BR /&gt;', '.join(value['sources'])&lt;BR /&gt;)&lt;BR /&gt;external_id = '{}:{}'.format(type_, indicator)&lt;BR /&gt;expiration = datetime.utcnow() + timedelta(days=365)&lt;BR /&gt;if expired:&lt;BR /&gt;expiration = datetime.fromtimestamp(0)&lt;BR /&gt;expiration = expiration.isoformat()&lt;/P&gt;&lt;P&gt;result = {&lt;BR /&gt;'Description': description,&lt;BR /&gt;'Confidence': value['confidence'],&lt;BR /&gt;'ExternalId': external_id,&lt;BR /&gt;'IndicatorExpirationDateTime': expiration&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;if type_ == 'URL':&lt;BR /&gt;result['Url'] = indicator&lt;BR /&gt;elif type_ == 'domain':&lt;BR /&gt;result['DNSDomainName'] = indicator&lt;BR /&gt;elif type_ == 'md5':&lt;BR /&gt;result['FileMD5'] = indicator&lt;BR /&gt;elif type_ == 'sha256':&lt;BR /&gt;result['FileSha256'] = indicator&lt;BR /&gt;elif type_ == 'IPv4':&lt;BR /&gt;if '-' in indicator:&lt;BR /&gt;a1, a2 = indicator.split('-', 1)&lt;BR /&gt;&lt;FONT color="#FF0000"&gt;#indicator = netaddr.IPRange(a1, a2).cidrs()[0]&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT color="#FF0000"&gt;r =list(netaddr.IPRange(a1, a2))&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT color="#FF0000"&gt;indicator = [str(i) for i in r]&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#FF0000"&gt;#parsed = netaddr.IPNetwork(indicator)&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT color="#FF0000"&gt;#if parsed.size == 1:&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT color="#FF0000"&gt;result['NetworkDestinationIPv4'] = str(indicator)&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT color="#FF0000"&gt;#else:&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT color="#FF0000"&gt;# result['NetworkDestinationCidrBlock'] = str(indicator)&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;else:&lt;BR /&gt;self.statistics['error.unhandled_type'] += 1&lt;BR /&gt;raise RuntimeError('{} - Unhandled {}'.format(self.name, type_))&lt;/P&gt;&lt;P&gt;return result&lt;/P&gt;&lt;P&gt;def _checkpoint_check(self, source=None, value=None):&lt;BR /&gt;t0 = time.time()&lt;/P&gt;&lt;P&gt;while ((time.time() - t0) &amp;lt; 30) and self._queue.qsize() != 0:&lt;BR /&gt;gevent.sleep(0.5)&lt;BR /&gt;self._push_glet.kill()&lt;/P&gt;&lt;P&gt;LOG.info('{} - checkpoint with {} elements in the queue'.format(self.name, self._queue.qsize()))&lt;BR /&gt;super(Output, self).checkpoint(source=source, value=value)&lt;/P&gt;&lt;P&gt;@_counting('update.processed')&lt;BR /&gt;def filtered_update(self, source=None, indicator=None, value=None):&lt;BR /&gt;try:&lt;BR /&gt;self._queue.put(&lt;BR /&gt;self._encode_indicator(indicator, value, expired=False),&lt;BR /&gt;block=True,&lt;BR /&gt;timeout=0.001&lt;BR /&gt;)&lt;BR /&gt;except Full:&lt;BR /&gt;self.statistics['error.queue_full'] += 1&lt;/P&gt;&lt;P&gt;@_counting('withdraw.processed')&lt;BR /&gt;def filtered_withdraw(self, source=None, indicator=None, value=None):&lt;BR /&gt;if value is None:&lt;BR /&gt;self.statistics['error.no_value'] += 1&lt;BR /&gt;return&lt;/P&gt;&lt;P&gt;try:&lt;BR /&gt;self._queue.put(&lt;BR /&gt;self._encode_indicator(indicator, value, expired=True),&lt;BR /&gt;block=True,&lt;BR /&gt;timeout=0.001&lt;BR /&gt;)&lt;BR /&gt;except Full:&lt;BR /&gt;self.statistics['error.queue_full'] += 1&lt;/P&gt;&lt;P&gt;@_counting('checkpoint.rx')&lt;BR /&gt;def checkpoint(self, source=None, value=None):&lt;BR /&gt;self.state = ft_states.CHECKPOINT&lt;BR /&gt;self._checkpoint_glet = gevent.spawn(&lt;BR /&gt;self._checkpoint_check,&lt;BR /&gt;source,&lt;BR /&gt;value&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;def mgmtbus_status(self):&lt;BR /&gt;result = super(ActorBaseFT, self).mgmtbus_status()&lt;BR /&gt;result['sub_state'] = 'ERROR'&lt;BR /&gt;result['sub_state_message'] = 'This node is deprecated'&lt;/P&gt;&lt;P&gt;return result&lt;/P&gt;&lt;P&gt;def length(self, source=None):&lt;BR /&gt;return self._queue.qsize()&lt;/P&gt;&lt;P&gt;def start(self):&lt;BR /&gt;super(Output, self).start()&lt;/P&gt;&lt;P&gt;self._push_glet = gevent.spawn(self._push_loop)&lt;/P&gt;&lt;P&gt;def stop(self):&lt;BR /&gt;super(Output, self).stop()&lt;/P&gt;&lt;P&gt;if self._push_glet is not None:&lt;BR /&gt;self._push_glet.kill()&lt;/P&gt;&lt;P&gt;if self._checkpoint_glet is not None:&lt;BR /&gt;self._checkpoint_glet.kill()&lt;/P&gt;&lt;P&gt;def hup(self, source=None):&lt;BR /&gt;LOG.info('%s - hup received, reload side config', self.name)&lt;BR /&gt;self._load_side_config()&lt;/P&gt;&lt;P&gt;@staticmethod&lt;BR /&gt;def gc(name, config=None):&lt;BR /&gt;ActorBaseFT.gc(name, config=config)&lt;BR /&gt;shutil.rmtree(name, ignore_errors=True)&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;class OutputBatch(ActorBaseFT):&lt;BR /&gt;def __init__(self, name, chassis, config):&lt;BR /&gt;self._queue = None&lt;/P&gt;&lt;P&gt;super(OutputBatch, self).__init__(name, chassis, config)&lt;/P&gt;&lt;P&gt;self._push_glet = None&lt;BR /&gt;self._checkpoint_glet = None&lt;/P&gt;&lt;P&gt;def configure(self):&lt;BR /&gt;super(OutputBatch, self).configure()&lt;/P&gt;&lt;P&gt;self.queue_maxsize = int(self.config.get('queue_maxsize', 100000))&lt;BR /&gt;if self.queue_maxsize == 0:&lt;BR /&gt;self.queue_maxsize = None&lt;BR /&gt;self._queue = Queue(maxsize=self.queue_maxsize)&lt;/P&gt;&lt;P&gt;self.client_id = self.config.get('client_id', None)&lt;BR /&gt;self.client_secret = self.config.get('client_secret', None)&lt;BR /&gt;self.tenant_id = self.config.get('tenant_id', None)&lt;BR /&gt;self.action = self.config.get('action', 'Alert')&lt;BR /&gt;self.severity = self.config.get('severity', None)&lt;/P&gt;&lt;P&gt;self.side_config_path = self.config.get('side_config', None)&lt;BR /&gt;if self.side_config_path is None:&lt;BR /&gt;self.side_config_path = os.path.join(&lt;BR /&gt;os.environ['MM_CONFIG_DIR'],&lt;BR /&gt;'%s_side_config.yml' % self.name&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;self._load_side_config()&lt;/P&gt;&lt;P&gt;def _load_side_config(self):&lt;BR /&gt;try:&lt;BR /&gt;with open(self.side_config_path, 'r') as f:&lt;BR /&gt;sconfig = yaml.safe_load(f)&lt;/P&gt;&lt;P&gt;except Exception as e:&lt;BR /&gt;LOG.error('%s - Error loading side config: %s', self.name, str(e))&lt;BR /&gt;return&lt;/P&gt;&lt;P&gt;client_id = sconfig.get('client_id', None)&lt;BR /&gt;if client_id is not None:&lt;BR /&gt;self.client_id = client_id&lt;BR /&gt;LOG.info('{} - client_id set'.format(self.name))&lt;/P&gt;&lt;P&gt;client_secret = sconfig.get('client_secret', None)&lt;BR /&gt;if client_secret is not None:&lt;BR /&gt;self.client_secret = client_secret&lt;BR /&gt;LOG.info('{} - client_secret set'.format(self.name))&lt;/P&gt;&lt;P&gt;tenant_id = sconfig.get('tenant_id', None)&lt;BR /&gt;if tenant_id is not None:&lt;BR /&gt;self.tenant_id = tenant_id&lt;BR /&gt;LOG.info('{} - tenant_id set'.format(self.name))&lt;/P&gt;&lt;P&gt;action = sconfig.get('action', None)&lt;BR /&gt;if action is not None:&lt;BR /&gt;self.action = action&lt;BR /&gt;LOG.info('{} - action set'.format(self.action))&lt;/P&gt;&lt;P&gt;def connect(self, inputs, output):&lt;BR /&gt;output = False&lt;BR /&gt;super(OutputBatch, self).connect(inputs, output)&lt;/P&gt;&lt;P&gt;def _initialize_table(self, truncate=False):&lt;BR /&gt;self.table = Table(name=self.name, truncate=truncate)&lt;/P&gt;&lt;P&gt;def initialize(self):&lt;BR /&gt;self._initialize_table()&lt;/P&gt;&lt;P&gt;def rebuild(self):&lt;BR /&gt;self._initialize_table(truncate=(self.last_checkpoint is None))&lt;/P&gt;&lt;P&gt;def reset(self):&lt;BR /&gt;self._initialize_table(truncate=True)&lt;/P&gt;&lt;P&gt;def _get_auth_token(self):&lt;BR /&gt;if self.client_id is None:&lt;BR /&gt;LOG.error('{} - client_id not set'.format(self.name))&lt;BR /&gt;raise AuthConfigException('{} - client_id not set'.format(self.name))&lt;BR /&gt;if self.client_secret is None:&lt;BR /&gt;LOG.error('{} - client_secret not set'.format(self.name))&lt;BR /&gt;raise AuthConfigException('{} - client_secret not set'.format(self.name))&lt;BR /&gt;if self.tenant_id is None:&lt;BR /&gt;LOG.error('{} - tenant_id not set'.format(self.name))&lt;BR /&gt;raise AuthConfigException('{} - tenant_id not set'.format(self.name))&lt;/P&gt;&lt;P&gt;context = adal.AuthenticationContext(&lt;BR /&gt;AUTHORITY_URL.format(self.tenant_id),&lt;BR /&gt;validate_authority=self.tenant_id != 'adfs',&lt;BR /&gt;api_version=None&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;token = context.acquire_token_with_client_credentials(&lt;BR /&gt;RESOURCE,&lt;BR /&gt;self.client_id,&lt;BR /&gt;self.client_secret&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;if token is None or 'accessToken' not in token:&lt;BR /&gt;LOG.error('{} - Invalid token or accessToken not available'.format(self.name))&lt;BR /&gt;raise RuntimeError('{} - Invalid token or accessToken not available'.format(self.name))&lt;/P&gt;&lt;P&gt;return token['accessToken']&lt;/P&gt;&lt;P&gt;def _push_indicators(self, token, indicators):&lt;BR /&gt;message = {&lt;BR /&gt;'Indicators': list(indicators)&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;LOG.debug(message)&lt;/P&gt;&lt;P&gt;result = requests.post(&lt;BR /&gt;WD_ATP_TIINDICATORS_ENDPOINT,&lt;BR /&gt;headers={&lt;BR /&gt;'Content-Type': 'application/json',&lt;BR /&gt;'Authorization': 'Bearer {}'.format(token)&lt;BR /&gt;},&lt;BR /&gt;json=message&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;LOG.debug(result.text)&lt;/P&gt;&lt;P&gt;result.raise_for_status()&lt;/P&gt;&lt;P&gt;# Check the status of the submitted indicators&lt;BR /&gt;# NOTE: if the indicator contains a range split by _encode_indicators, a partial submission might go through&lt;BR /&gt;# i.e. 192.168.0.1-192.168.0.3 can be split in 192.168.0.1/32 and 192.168.0.2/31&lt;BR /&gt;# the first might go through, the second might return error&lt;BR /&gt;# This output node doesn't check for this condition (although the error counters are correctly updated)&lt;/P&gt;&lt;P&gt;result = result.json()&lt;BR /&gt;if not result or '@odata.context' not in result or result['@odata.context'] != '&lt;A href="https://api.securitycenter.windows.com/api/$metadata#Collection(microsoft.windowsDefenderATP.api.ImportIndicatorResult" target="_blank"&gt;https://api.securitycenter.windows.com/api/$metadata#Collection(microsoft.windowsDefenderATP.api.ImportIndicatorResult&lt;/A&gt;)':&lt;BR /&gt;raise WDATPResponseException('Unexpected response from WDATP API')&lt;/P&gt;&lt;P&gt;if 'value' not in result:&lt;BR /&gt;raise WDATPResponseException('Missing value from WDATP API result')&lt;/P&gt;&lt;P&gt;for v in result['value']:&lt;BR /&gt;if 'indicator' not in v or 'isFailed' not in v:&lt;BR /&gt;raise WDATPResponseException('Missing indicator values from WDATP response')&lt;BR /&gt;LOG.debug('{} - Got result for indicator {}: isFailed is {}'.format(self.name, v['indicator'], v["isFailed"]))&lt;BR /&gt;if not v["isFailed"]:&lt;BR /&gt;# Success!&lt;BR /&gt;self.statistics['indicator.tx'] += 1&lt;BR /&gt;else:&lt;BR /&gt;failReason = v['failureReason'] if 'failureReason' in v else 'Unknown'&lt;BR /&gt;LOG.error('{}: error submitting indicator {}: {}'.format(self.name, v['indicator'], failReason))&lt;BR /&gt;self.statistics['error.submit'] += 1&lt;/P&gt;&lt;P&gt;def _push_loop(self):&lt;BR /&gt;while True:&lt;BR /&gt;msg = self._queue.get()&lt;/P&gt;&lt;P&gt;artifacts = deque()&lt;BR /&gt;artifacts.append(msg)&lt;/P&gt;&lt;P&gt;try:&lt;BR /&gt;while len(artifacts) &amp;lt; 50:&lt;BR /&gt;artifacts.append(self._queue.get_nowait())&lt;BR /&gt;except Empty:&lt;BR /&gt;pass&lt;/P&gt;&lt;P&gt;while True:&lt;BR /&gt;retries = 0&lt;/P&gt;&lt;P&gt;try:&lt;BR /&gt;LOG.info('{} - Sending {} indicators'.format(self.name, len(artifacts)))&lt;BR /&gt;token = self._get_auth_token()&lt;BR /&gt;LOG.debug('{} - token: {}'.format(self.name, token))&lt;/P&gt;&lt;P&gt;self._push_indicators(&lt;BR /&gt;token=token,&lt;BR /&gt;indicators=artifacts&lt;BR /&gt;)&lt;BR /&gt;# Counter already incremented in push_indicators&lt;BR /&gt;# self.statistics['indicator.tx'] += len(artifacts)&lt;BR /&gt;break&lt;/P&gt;&lt;P&gt;except gevent.GreenletExit:&lt;BR /&gt;return&lt;/P&gt;&lt;P&gt;except HTTPError as e:&lt;BR /&gt;LOG.error('{} - error submitting indicators - {}'.format(self.name, str(e)))&lt;BR /&gt;status_code = e.response.status_code&lt;/P&gt;&lt;P&gt;if status_code &amp;gt;= 400 and status_code &amp;lt; 500:&lt;BR /&gt;LOG.error('{}: error in request - {}'.format(self.name, e.response.text))&lt;BR /&gt;self.statistics['error.invalid_request'] += 1&lt;BR /&gt;break&lt;/P&gt;&lt;P&gt;self.statistics['error.submit'] += 1&lt;BR /&gt;gevent.sleep(60)&lt;/P&gt;&lt;P&gt;except AuthConfigException as e:&lt;BR /&gt;LOG.exception('{} - Error submitting indicators - {}'.format(self.name, str(e)))&lt;BR /&gt;self.statistics['error.submit'] += 1&lt;BR /&gt;gevent.sleep(60.0)&lt;/P&gt;&lt;P&gt;except WDATPResponseException as e:&lt;BR /&gt;LOG.exception('{} - error submitting indicators - {}'.format(self.name, str(e)))&lt;BR /&gt;self.statistics['error.submit'] += 1&lt;BR /&gt;break&lt;BR /&gt;&lt;BR /&gt;except Exception as e:&lt;BR /&gt;LOG.exception('{} - error submitting indicators - {}'.format(self.name, str(e)))&lt;BR /&gt;self.statistics['error.submit'] += 1&lt;BR /&gt;retries += 1&lt;BR /&gt;if retries &amp;gt; 5:&lt;BR /&gt;break&lt;BR /&gt;gevent.sleep(120.0)&lt;/P&gt;&lt;P&gt;gevent.sleep(0.1)&lt;/P&gt;&lt;P&gt;def _encode_indicator(self, indicator, value, expired=False):&lt;BR /&gt;type_ = MM_2_WDATP_TYPE.get(&lt;BR /&gt;value['type'],&lt;BR /&gt;None&lt;BR /&gt;)&lt;BR /&gt;if type_ is None:&lt;BR /&gt;self.statistics['error.unhandled_type'] += 1&lt;BR /&gt;raise RuntimeError('{} - Unhandled {}'.format(self.name, type_))&lt;/P&gt;&lt;P&gt;if value['type'] == 'IPv4' and '-' in indicator:&lt;BR /&gt;a1, a2 = indicator.split('-', 1)&lt;BR /&gt;&lt;FONT color="#FF0000"&gt;#r = netaddr.IPRange(a1, a2).cidrs()&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT color="#FF0000"&gt;r =list(netaddr.IPRange(a1, a2))&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT color="#FF0000"&gt;indicators = [str(i) for i in r]&lt;/FONT&gt;&lt;BR /&gt;&lt;BR /&gt;else:&lt;BR /&gt;indicators = [indicator]&lt;/P&gt;&lt;P&gt;description = '{} indicator from {}'.format(&lt;BR /&gt;type_,&lt;BR /&gt;', '.join(value['sources'])&lt;BR /&gt;)&lt;BR /&gt;title = 'MineMeld - {}'.format(indicator)&lt;/P&gt;&lt;P&gt;creation = datetime.utcnow()&lt;BR /&gt;creation = creation.isoformat() + 'Z'&lt;/P&gt;&lt;P&gt;expiration = datetime.utcnow() + timedelta(days=365)&lt;BR /&gt;if expired:&lt;BR /&gt;expiration = datetime.fromtimestamp(0)&lt;BR /&gt;expiration = expiration.isoformat() + 'Z' # expiration is always in UTC&lt;/P&gt;&lt;P&gt;result = []&lt;BR /&gt;for i in indicators:&lt;BR /&gt;d = dict(&lt;BR /&gt;indicatorValue=i,&lt;BR /&gt;indicatorType=type_,&lt;BR /&gt;title=title,&lt;BR /&gt;description=description,&lt;BR /&gt;creationTimeDateTimeUtc=creation,&lt;BR /&gt;expirationTime=expiration,&lt;BR /&gt;action=self.action&lt;BR /&gt;)&lt;BR /&gt;if self.severity is not None:&lt;BR /&gt;d['severity'] = self.severity&lt;/P&gt;&lt;P&gt;result.append(d)&lt;/P&gt;&lt;P&gt;return result&lt;/P&gt;&lt;P&gt;def _checkpoint_check(self, source=None, value=None):&lt;BR /&gt;t0 = time.time()&lt;/P&gt;&lt;P&gt;while ((time.time() - t0) &amp;lt; 30) and self._queue.qsize() != 0:&lt;BR /&gt;gevent.sleep(0.5)&lt;BR /&gt;self._push_glet.kill()&lt;/P&gt;&lt;P&gt;LOG.info('{} - checkpoint with {} elements in the queue'.format(self.name, self._queue.qsize()))&lt;BR /&gt;super(OutputBatch, self).checkpoint(source=source, value=value)&lt;/P&gt;&lt;P&gt;@_counting('update.processed')&lt;BR /&gt;def filtered_update(self, source=None, indicator=None, value=None):&lt;BR /&gt;try:&lt;BR /&gt;for i in self._encode_indicator(indicator, value, expired=False):&lt;BR /&gt;self._queue.put(&lt;BR /&gt;i,&lt;BR /&gt;block=True,&lt;BR /&gt;timeout=0.001&lt;BR /&gt;)&lt;BR /&gt;except Full:&lt;BR /&gt;self.statistics['error.queue_full'] += 1&lt;/P&gt;&lt;P&gt;@_counting('withdraw.processed')&lt;BR /&gt;def filtered_withdraw(self, source=None, indicator=None, value=None):&lt;BR /&gt;if value is None:&lt;BR /&gt;self.statistics['error.no_value'] += 1&lt;BR /&gt;return&lt;/P&gt;&lt;P&gt;try:&lt;BR /&gt;for i in self._encode_indicator(indicator, value, expired=True):&lt;BR /&gt;self._queue.put(&lt;BR /&gt;i,&lt;BR /&gt;block=True,&lt;BR /&gt;timeout=0.001&lt;BR /&gt;)&lt;BR /&gt;except Full:&lt;BR /&gt;self.statistics['error.queue_full'] += 1&lt;/P&gt;&lt;P&gt;@_counting('checkpoint.rx')&lt;BR /&gt;def checkpoint(self, source=None, value=None):&lt;BR /&gt;self.state = ft_states.CHECKPOINT&lt;BR /&gt;self._checkpoint_glet = gevent.spawn(&lt;BR /&gt;self._checkpoint_check,&lt;BR /&gt;source,&lt;BR /&gt;value&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;def length(self, source=None):&lt;BR /&gt;return self._queue.qsize()&lt;/P&gt;&lt;P&gt;def start(self):&lt;BR /&gt;super(OutputBatch, self).start()&lt;/P&gt;&lt;P&gt;self._push_glet = gevent.spawn(self._push_loop)&lt;/P&gt;&lt;P&gt;def stop(self):&lt;BR /&gt;super(OutputBatch, self).stop()&lt;/P&gt;&lt;P&gt;if self._push_glet is not None:&lt;BR /&gt;self._push_glet.kill()&lt;/P&gt;&lt;P&gt;if self._checkpoint_glet is not None:&lt;BR /&gt;self._checkpoint_glet.kill()&lt;/P&gt;&lt;P&gt;self.table.close()&lt;/P&gt;&lt;P&gt;def hup(self, source=None):&lt;BR /&gt;LOG.info('%s - hup received, reload side config', self.name)&lt;BR /&gt;self._load_side_config()&lt;/P&gt;&lt;P&gt;@staticmethod&lt;BR /&gt;def gc(name, config=None):&lt;BR /&gt;ActorBaseFT.gc(name, config=config)&lt;BR /&gt;shutil.rmtree(name, ignore_errors=True)&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
      <pubDate>Wed, 07 Oct 2020 19:46:23 GMT</pubDate>
      <guid>https://live.paloaltonetworks.com/t5/general-topics/system-engine-logs-cidr-is-not-a-valid-ip-indicator-error/m-p/354959#M95543</guid>
      <dc:creator>HAO.BAN</dc:creator>
      <dc:date>2020-10-07T19:46:23Z</dc:date>
    </item>
    <item>
      <title>Re: System - Engine - Logs - CIDR is not a valid IP indicator ERROR</title>
      <link>https://live.paloaltonetworks.com/t5/general-topics/system-engine-logs-cidr-is-not-a-valid-ip-indicator-error/m-p/354975#M95544</link>
      <description>&lt;P&gt;My fork is here:&lt;/P&gt;&lt;P&gt;&lt;A href="https://github.com/banhao/minemeld-wd-atp/blob/banhao-patch-For-Microsoft-Defender-ATP-only-accept-signle-IP/node.py" target="_blank"&gt;https://github.com/banhao/minemeld-wd-atp/blob/banhao-patch-For-Microsoft-Defender-ATP-only-accept-signle-IP/node.py&lt;/A&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 07 Oct 2020 20:05:55 GMT</pubDate>
      <guid>https://live.paloaltonetworks.com/t5/general-topics/system-engine-logs-cidr-is-not-a-valid-ip-indicator-error/m-p/354975#M95544</guid>
      <dc:creator>HAO.BAN</dc:creator>
      <dc:date>2020-10-07T20:05:55Z</dc:date>
    </item>
    <item>
      <title>Re: System - Engine - Logs - CIDR is not a valid IP indicator ERROR</title>
      <link>https://live.paloaltonetworks.com/t5/general-topics/system-engine-logs-cidr-is-not-a-valid-ip-indicator-error/m-p/355318#M95545</link>
      <description>&lt;P&gt;Official patch has been released&lt;/P&gt;&lt;P&gt;&lt;A href="https://github.com/PaloAltoNetworks/minemeld-wd-atp/pull/8" target="_blank"&gt;https://github.com/PaloAltoNetworks/minemeld-wd-atp/pull/8&lt;/A&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 09 Oct 2020 00:29:04 GMT</pubDate>
      <guid>https://live.paloaltonetworks.com/t5/general-topics/system-engine-logs-cidr-is-not-a-valid-ip-indicator-error/m-p/355318#M95545</guid>
      <dc:creator>HAO.BAN</dc:creator>
      <dc:date>2020-10-09T00:29:04Z</dc:date>
    </item>
    <item>
      <title>Re: System - Engine - Logs - CIDR is not a valid IP indicator ERROR</title>
      <link>https://live.paloaltonetworks.com/t5/general-topics/system-engine-logs-cidr-is-not-a-valid-ip-indicator-error/m-p/356197#M95546</link>
      <description>&lt;P&gt;Thank you&amp;nbsp;&lt;a href="https://live.paloaltonetworks.com/t5/user/viewprofilepage/user-id/78157"&gt;@HAO.BAN&lt;/a&gt;&amp;nbsp;, we released version 0.5 of the Output Node with the fix you suggested.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;It is available here:&amp;nbsp;&lt;A href="https://github.com/PaloAltoNetworks/minemeld-wd-atp" target="_blank"&gt;https://github.com/PaloAltoNetworks/minemeld-wd-atp&lt;/A&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 14 Oct 2020 08:02:21 GMT</pubDate>
      <guid>https://live.paloaltonetworks.com/t5/general-topics/system-engine-logs-cidr-is-not-a-valid-ip-indicator-error/m-p/356197#M95546</guid>
      <dc:creator>fvigo</dc:creator>
      <dc:date>2020-10-14T08:02:21Z</dc:date>
    </item>
  </channel>
</rss>

