


































@@ -49,6 +49,52 @@ describe("ssrf pinning", () => {
4949);
5050});
515152+it("keeps automatic pinned lookups on IPv4 when both address families are available", async () => {
53+const lookup = createPinnedLookup({
54+hostname: "api.anthropic.com",
55+addresses: ["160.79.104.10", "2607:6bc0::10"],
56+});
57+const lookupDefault = () =>
58+new Promise<{ address: string; family?: number }>((resolve, reject) => {
59+lookup("api.anthropic.com", (err, address, family) => {
60+if (err) {
61+reject(err);
62+} else {
63+resolve({ address: address, family });
64+}
65+});
66+});
67+const lookupWithOptions = (options: { family?: number }) =>
68+new Promise<{ address: string; family?: number }>((resolve, reject) => {
69+lookup("api.anthropic.com", options, (err, address, family) => {
70+if (err) {
71+reject(err);
72+} else {
73+resolve({ address: address, family });
74+}
75+});
76+});
77+78+await expect(lookupDefault()).resolves.toEqual({ address: "160.79.104.10", family: 4 });
79+await expect(lookupDefault()).resolves.toEqual({ address: "160.79.104.10", family: 4 });
80+81+const all = await new Promise<unknown>((resolve, reject) => {
82+lookup("api.anthropic.com", { all: true }, (err, addresses) => {
83+if (err) {
84+reject(err);
85+} else {
86+resolve(addresses);
87+}
88+});
89+});
90+expect(all).toEqual([{ address: "160.79.104.10", family: 4 }]);
91+92+await expect(lookupWithOptions({ family: 6 })).resolves.toEqual({
93+address: "2607:6bc0::10",
94+family: 6,
95+});
96+});
97+5298it.each([
5399{ name: "RFC1918 private address", address: "10.0.0.8" },
54100{ name: "RFC2544 benchmarking range", address: "198.18.0.1" },
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。