Skip to content

feat(reportedip): add ReportedIP IP reputation service package#363

Open
dingzhejianjian wants to merge 1 commit into
chaitin:mainfrom
dingzhejianjian:feat/reportedip
Open

feat(reportedip): add ReportedIP IP reputation service package#363
dingzhejianjian wants to merge 1 commit into
chaitin:mainfrom
dingzhejianjian:feat/reportedip

Conversation

@dingzhejianjian

@dingzhejianjian dingzhejianjian commented Jun 27, 2026

Copy link
Copy Markdown

接入设备

ReportedIP — 欧盟托管、GDPR 合规的开源 IP 信誉查询服务。

认证方式

无需认证,公开接口可直接使用。也可注册免费 Key 获取更高额度。

实现方法

RPC 方法 后端 API 类型 说明
CheckIP GET /check-public?ip={ip} IP 信誉查询(置信度、ISP、国家、主机名)

联调证据

ReportedIP CheckIP

{"ip":"8.8.8.8","abuseConfidencePercentage":67,"isp":"GOOGLE","domain":"dns.google"}

测试结果

ℹ tests 6
ℹ pass  6
ℹ fail  0

OctoBus 联调证据

MCP 工具列表

curl -s -X POST 'http://127.0.0.1:9000/capsets/threat-intel/mcp' \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

Response:

{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "tools": [
      {"name": "reportedip__reportedip-test__check_i_p", "description": "ReportedIP.ReportedIP/CheckIP"}
    ]
  }
}

CheckIP 通过 OctoBus

curl -s -X POST 'http://127.0.0.1:9000/capsets/threat-intel/connect/reportedip-test/ReportedIP.ReportedIP/CheckIP' \
  -H 'Content-Type: application/json' \
  -d '{"ip":"8.8.8.8"}'

Response:

{
  "message": "ok",
  "ip": "8.8.8.8",
  "abuseConfidencePercentage": 67,
  "countryCode": "US",
  "isp": "GOOGLE"
}

Closes #359

@monkeyscan

monkeyscan Bot commented Jun 27, 2026

Copy link
Copy Markdown

PR Title: feat(reportedip): add ReportedIP IP reputation ser...

Commit: f4e3b7a

本次 PR 新增了一个 ReportedIP 服务包,用于集成欧盟托管的 IP 信誉查询服务。主要变更包括:

  1. 新增服务元数据(service.json、config/secret schema、package.json、README)
  2. 新增 Protobuf 定义(reportedip.proto)
  3. 实现核心逻辑(reportedip.js):包含 IP 格式校验、HTTP 超时控制、JSON 解析、错误映射和日志记录
  4. 新增入口文件(bin/reportedip.js)并在 octobus-tentacles.js 注册
  5. 新增基础单元测试(reportedip.test.js)覆盖正常请求、参数校验和 HTTP 错误

代码整体结构清晰,安全方面对输入 IP 做了 net.isIP() 校验和 encodeURIComponent 编码,防止了 URL 注入。HTTP 请求使用了 AbortController 实现超时控制,错误处理区分了 4xx(FAILED_PRECONDITION)和 5xx(UNAVAILABLE)。测试覆盖了主要场景。未发现安全漏洞或严重缺陷。

@dingzhejianjian
dingzhejianjian marked this pull request as draft June 27, 2026 16:16
@monkeyscan

monkeyscan Bot commented Jun 27, 2026

Copy link
Copy Markdown

PR Title: feat(reportedip): add ReportedIP IP reputation ser...

Commit: c50793f

本次 PR 包含两处修改:1) 在 unwrapString 函数中增加递归深度限制(depth > 10 时返回空字符串),防止因循环引用或极深嵌套对象导致栈溢出;2) 在 mapHttpError 中针对 HTTP 403 和 429 状态码增加细化的 gRPC 错误映射:403 映射为 PERMISSION_DENIED,429 映射为 UNAVAILABLE,其余 4xx 仍为 FAILED_PRECONDITION,5xx 仍为 UNAVAILABLE。整体看是合理的健壮性改进和错误语义优化。

@monkeyscan

monkeyscan Bot commented Jun 29, 2026

Copy link
Copy Markdown

PR Title: feat(reportedip): add ReportedIP IP reputation ser...

Commit: 5e19f81

本次变更在 services/bin/octobus-tentacles.jsservices 配置对象中新增了 8 个服务映射条目(含 diff 中可见的全部新增)。变更内容纯粹是配置层面的扩展,无逻辑代码改动。所有新增条目均遵循了现有的路径命名约定(../<package>/bin/<name>.js../<package>/src/service.js),键名唯一,语法正确。未发现重复键、路径不一致或安全相关的问题。整体风险极低,属于常规的服务注册扩展。

@monkeyscan

monkeyscan Bot commented Jun 29, 2026

Copy link
Copy Markdown

PR Title: feat(reportedip): add ReportedIP IP reputation ser...

Commit: 794dfca

本次 PR 修改了 services/package.json,主要变更包括:1) 在 bin 字段中按字母顺序重排并新增了 8 个服务入口(如 alibaba-cloud-simple-application-server-firewall、defectdojo、elastic-kibana-7-17-26 等);2) 在 files 字段中同步新增了对应的 bin/*.js 路径和 vendor__product 内部模块目录;3) 在 dependencies 与 bundledDependencies 中新增了 @alicloud/swas-open20200601 和 undici 依赖;4) 将 scripts 目录加入 files 数组。整体是一次典型的服务注册与依赖更新,但 files 数组末尾的 "reportedip" 条目格式与同类 vendor__product 目录不一致,疑似合并冲突解决时引入的笔误。

Comment thread services/package.json Outdated
@dingzhejianjian
dingzhejianjian marked this pull request as ready for review June 29, 2026 14:12

@dingzhejianjian dingzhejianjian left a comment

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ 已完成手动验证。CheckIP 返回 67% 置信度、ISP、域名信息,无需 API Key。

@innomentats

Copy link
Copy Markdown
Member

Reviewer note: this PR currently has merge conflicts with the target branch, so it cannot be merged or reviewed safely in its current state.

Please rebase or merge the latest base branch, resolve the conflicts, and make sure GitHub Actions pass again. I am marking/keeping this PR as draft until the conflicts are resolved.

@innomentats
innomentats marked this pull request as draft June 30, 2026 15:36
@monkeyscan

monkeyscan Bot commented Jun 30, 2026

Copy link
Copy Markdown

PR Title: feat(reportedip): add ReportedIP IP reputation ser...

Commit: f267371

本次变更在 services/bin/octobus-tentacles.js 的服务注册表(services 对象)中新增了 15 个服务条目,涵盖 cloudatlas、dbaudit、first-epss-v1、hermes-gateway、huorong-endpoint-security-management-system-v2-0-19-3、owasp-dependency-track-sca-v5-0、qianxin-hunter、tencent-tix-saas、telegram-bot-api、threatbook-ngtip-v5、volcengine-cloud-firewall、tencent-bh、alibaba-sas、misp、opencti。变更沿用了现有的命名约定和路径结构,每个条目均映射到对应的 entryFile 和 serviceModule,格式一致,无语法错误。整体变更风险较低,但新增条目的插入位置存在部分排序不一致的问题。

@monkeyscan

monkeyscan Bot commented Jun 30, 2026

Copy link
Copy Markdown

PR Title: feat(reportedip): add ReportedIP IP reputation ser...

Commit: ca7a4ff

本次 PR 修改 services/package.json,在 binfiles 字段中批量新增了 15+ 个服务的注册条目。整体结构遵循了原有的 vendor__product 命名规范。但 bin 字段在解决 octobus-tentaclesreportedip 的冲突时引入了严重的语法错误和映射错误:1) bin 对象中出现了一条无 key 的裸字符串 "bin/octobus-tentacles.js",会导致 package.json 解析失败;2) octobus-tentacles 的 bin 路径被错误指向了 bin/reportedip.js。这两个问题会直接影响 npm/yarn 安装及命令行入口的执行行为,需要立即修复。

Comment thread services/package.json Outdated
Comment thread services/package.json Outdated
Comment thread services/bin/octobus-tentacles.js Outdated
@monkeyscan

monkeyscan Bot commented Jun 30, 2026

Copy link
Copy Markdown

PR Title: feat(reportedip): add ReportedIP IP reputation ser...

Commit: f4e3b7a

No changed files to review.

@dingzhejianjian

Copy link
Copy Markdown
Author

手动验证结果 ✅

步骤 结果 说明
CheckIP (8.8.8.8) 返回置信度 67%、ISP: GOOGLE、US
CheckIP (invalid) 返回 INVALID_ARGUMENT: invalid IP address format

结论:2/2 通过,可进入 review。

@dingzhejianjian
dingzhejianjian marked this pull request as ready for review July 1, 2026 02:45
@dingzhejianjian
dingzhejianjian marked this pull request as draft July 1, 2026 02:45
@dingzhejianjian
dingzhejianjian marked this pull request as ready for review July 1, 2026 02:45
@dingzhejianjian

Copy link
Copy Markdown
Author

手动验证结果(完整)

CheckIP (8.8.8.8)

命令:
curl -s -X POST 'http://10.2.37.168:9000/capsets/threat-intel/connect/reportedip-test/ReportedIP.ReportedIP/CheckIP' -H 'Content-Type: application/json' -d '{"ip":"8.8.8.8"}' | python3 -m json.tool

返回:
{
"message": "ok",
"ip": "8.8.8.8",
"abuseConfidencePercentage": 67,
"countryCode": "US",
"usageType": "Data Center/Web Hosting/Transit",
"isp": "GOOGLE",
"domain": "dns.google",
"hostnames": ["dns.google"]
}

CheckIP (无效 IP 测试)

命令:
curl -s -X POST 'http://10.2.37.168:9000/capsets/threat-intel/connect/reportedip-test/ReportedIP.ReportedIP/CheckIP' -H 'Content-Type: application/json' -d '{"ip":"not-an-ip"}' | python3 -m json.tool

返回:
{
"code": "invalid_argument",
"message": "INVALID_ARGUMENT: invalid IP address format"
}

✅ 结论:2/2 通过,可进入 review。

@monkeyscan

monkeyscan Bot commented Jul 1, 2026

Copy link
Copy Markdown

PR Title: feat(reportedip): add ReportedIP IP reputation ser...

Commit: 16456a0

本次 PR 大规模新增和重构了多个 OctoBus 服务适配器,主要变更包括:

  1. 引入统一的 TLS 跳过标准(使用 undici.Agent 的 rejectUnauthorized: false 作为 fetch dispatcher);
  2. 新增多个安全设备与通知服务(如 Qingteng HIDS v5、Huorong、Telegram Bot API、Imperva WAF 等);
  3. 对部分通知机器人服务的 JSON Schema 进行收紧(additionalProperties: false)并废弃旧字段。

整体评估:TLS 统一改造方向正确,但 Qingteng HIDS v5 仍使用旧的 process.env.NODE_TLS_REJECT_UNAUTHORIZED 全局修改模式,存在并发安全隐患;Feishu 群机器人直接删除了多个旧配置字段并收紧 additionalProperties,属于破坏性变更;DingTalk 收紧 additionalProperties 同样存在兼容性问题;Huorong 服务声明了 skipTlsVerify 却未在实现中使用,导致配置与行为不一致。建议修复上述问题后再合并。

@monkeyscan

monkeyscan Bot commented Jul 14, 2026

Copy link
Copy Markdown

PR Title: feat(reportedip): add ReportedIP IP reputation ser...

Commit: a7b10dc

本次 PR 修改了 services/bin/octobus-tentacles.js 中的服务注册表。主要变更包括:新增 aliyun-waf3dsensorfofa-network-space-mapperm01-intelligencensfocus-ngfw-v60-9900riversec-waf-26-03ruijie-behavior-firewall-r2-3-2-t0 等 7 个服务条目;从 services 对象中移除了 reportediptencent-bhalibaba-sasmisp 4 个服务。然而,文件末尾的合并冲突修复存在严重语法错误:被移除的 4 个服务条目被错误地粘贴到了 .action() 回调函数体之后(位于 await runServiceMain(...)program.parseAsync() 之间),导致出现 });, 语法错误及无效的对象属性语法,文件将无法解析执行。这是一个高置信度的功能性缺陷。

@monkeyscan

monkeyscan Bot commented Jul 14, 2026

Copy link
Copy Markdown

PR Title: feat(reportedip): add ReportedIP IP reputation ser...

Commit: 506f05d

本次变更主要是向 services/package.json 中新增 7 个服务包(aliyun-waf3、dsensor、fofa-network-space-mapper、m01-intelligence、nsfocus-ngfw-v60-9900、riversec-waf-26-03、ruijie-behavior-firewall-r2-3-2-t0),并在 bin、files、bundledDependencies 等字段做对应增补。同时新增依赖 @alicloud/pop-core ^1.8.0。变更还包含对部分现有条目(tencent-bh、opencti、alibaba-sas、misp、reportedip)在 files 数组中的位置进行了重新排序,推测是合并冲突解决后的结果。整体变更内容清晰,所有新增服务在 bin 与 files 中均有对应条目,未发现有功能缺失或安全风险的明显问题。files 数组的组织顺序较为混乱,但不影响 npm 包发布行为。

@monkeyscan

monkeyscan Bot commented Jul 14, 2026

Copy link
Copy Markdown

PR Title: feat(reportedip): add ReportedIP IP reputation ser...

Commit: cd75682

No changed files to review.

@monkeyscan

monkeyscan Bot commented Jul 14, 2026

Copy link
Copy Markdown

PR Title: feat(reportedip): add ReportedIP IP reputation ser...

Commit: c290f83

No changed files to review.

Comment thread services/bin/octobus-tentacles.js Outdated
@monkeyscan

monkeyscan Bot commented Jul 14, 2026

Copy link
Copy Markdown

PR Title: feat(reportedip): add ReportedIP IP reputation ser...

Commit: 0eba17a

本次 PR 新增了一个名为 reportedip 的 OctoBus 服务包,用于集成 ReportedIP(EU 托管的 IP 信誉服务)。主要变更包括:新增了服务配置、proto 定义、核心实现(reportedip.js)、CLI 入口、测试用例以及文档。核心逻辑使用 node:net.isIP 对输入 IP 进行格式校验,通过 fetch 调用上游 REST API,并将响应映射为 gRPC 响应格式返回。整体设计清晰,但存在少量代码维护和数据完整性方面的隐患。

const makeRuntime = (ctx = {}) => {
const cc = resolveCallContext(ctx);
const bindings = cc.bindings || {}; const meta = cc.meta || {}; const tm = resolveTimeoutMs(cc, bindings);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mapHttpError 调用处缺少显式 throw,存在维护隐患

代码中使用 if (!res.ok) mapHttpError(res, text); 来响应非 2xx 状态码。该语句依赖 mapHttpError 内部抛出异常来中断执行流程,语义上不够清晰。如果未来重构时将 mapHttpError 改为返回错误对象而非抛出,此处将静默吞掉 HTTP 错误并继续执行到 return { json: parseJson(text), text };,导致严重的逻辑缺陷。

Problem code:

Changed code at services/reportedip__reportedip/src/reportedip.js:39

Recommendation:
将调用处改为显式抛出:if (!res.ok) throw mapHttpError(res, text);。更稳妥的做法是移除 mapHttpError 函数,直接在 fetchJson 内联错误映射逻辑,以避免对函数副作用的隐式依赖。

return { code: 0, message: 'ok', ip: data.ip || ip, abuse_confidence_percentage: data.abuseConfidencePercentage ?? 0, country_code: data.countryCode || '', usage_type: data.usageType || '', isp: data.isp || '', domain: data.domain || '', hostnames: data.hostnames || [] };
};

return { runCheck };

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

上游 API 响应字段缺少类型校验与转换,存在数据完整性风险

runCheck 返回结果时直接将上游 API 的 data.abuseConfidencePercentage 透传给 protobuf 的 int32 字段 abuse_confidence_percentage。如果上游返回字符串(如 "67")或浮点数(如 67.5),而 proto 定义该字段为 int32,则可能导致序列化异常或下游消费者拿到非预期类型。hostnames 字段同样可能收到非数组类型,直接透传会破坏数据契约。

Problem code:

Changed code at services/reportedip__reportedip/src/reportedip.js:57

Recommendation:
在赋值前增加类型校验和显式转换:对 abuseConfidencePercentage 使用 Number.isFinite(data.abuseConfidencePercentage) ? Math.round(data.abuseConfidencePercentage) : 0;对 hostnames 使用 Array.isArray(data.hostnames) ? data.hostnames : [] 进行兜底,确保返回给 protobuf 的数据类型严格匹配 proto 定义。

test('handles HTTP errors', async () => {
setFetch(async () => resp(500, '')); await expectErr(() => handlers['ReportedIP.ReportedIP/CheckIP']({ ...ctx(), request: { ip: '8.8.8.8' } }), 'UNAVAILABLE');
});
test('helper utilities', () => { assert.equal(_test.firstDefined(undefined, null, 'x'), 'x'); });

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

测试用例缺少 IPv6 覆盖,存在功能回归风险

测试用例中仅覆盖了 IPv4(8.8.8.8)和非法输入(not-an-ip),未验证 IPv6 地址的处理路径。由于 net.isIP 同时支持 IPv4 和 IPv6,且 IPv6 在 URL query 参数中的编码行为(如是否需要方括号)与 IPv4 不同,缺失 IPv6 测试意味着该分支存在未被验证的回归风险。

Problem code:

Changed code at services/reportedip__reportedip/test/reportedip.test.js:28

Recommendation:
在测试文件中增加 IPv6 地址的测试用例,例如验证 request: { ip: '2001:4860:4860::8888' } 能正确通过校验、正确编码到 URL 中,并且上游返回的数据能正常映射到响应对象。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(reportedip): add ReportedIP IP reputation service

3 participants