From feb0bed3e372a54e75de7822e1adaa286d635fdf Mon Sep 17 00:00:00 2001 From: okxlin Date: Fri, 5 Jan 2024 14:55:11 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=B7=BB=E5=8A=A0myip=E5=88=B0=E5=88=97?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/myip/README.md | 149 ++++++++++++++++++++++++++++ apps/myip/data.yml | 20 ++++ apps/myip/latest/.env.sample | 5 + apps/myip/latest/data.yml | 31 ++++++ apps/myip/latest/docker-compose.yml | 20 ++++ apps/myip/logo.png | Bin 0 -> 1797 bytes 6 files changed, 225 insertions(+) create mode 100644 apps/myip/README.md create mode 100644 apps/myip/data.yml create mode 100644 apps/myip/latest/.env.sample create mode 100644 apps/myip/latest/data.yml create mode 100644 apps/myip/latest/docker-compose.yml create mode 100644 apps/myip/logo.png diff --git a/apps/myip/README.md b/apps/myip/README.md new file mode 100644 index 00000000..b4f7b4b7 --- /dev/null +++ b/apps/myip/README.md @@ -0,0 +1,149 @@ +# 🧰 IP 工具箱 + +![GitHub Repo stars](https://img.shields.io/github/stars/jason5ng32/MyIP) +![GitHub](https://img.shields.io/github/license/jason5ng32/MyIP) +![GitHub contributors](https://img.shields.io/github/contributors/jason5ng32/MyIP) +![GitHub commit activity (branch)](https://img.shields.io/github/commit-activity/m/jason5ng32/MyIP) + +[🇺🇸 English](https://github.com/jason5ng32/MyIP/blob/main/README.md) | [🇨🇳 简体中文](https://github.com/jason5ng32/MyIP/blob/main/README_CN.md) + +👉 在这里体验:[https://ipcheck.ing](https://ipcheck.ing) + +备注:你可以直接用我已经搭建好的服务,也可以自行搭建。 + +[![Deploy with Vercel](https://raw.githubusercontent.com/jason5ng32/MyIP/main/public/res/img/Vercel.svg)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fjason5ng32%2FMyIP&project-name=MyIP&repository-name=MyIP) +[![Deploy with Docker](https://raw.githubusercontent.com/jason5ng32/MyIP/main/public/res/img/Docker.svg)](https://hub.docker.com/r/jason5ng32/myip) + +这是一个完全开源的 IP 信息查看器,可以查询本机 IP、查询任意 IP、查询国内外网站可用性等。这是我第一次用 Vue.js 练手的项目。我……只是一个普通的产品经理。 + +## 👀 主要功能 + +* 🖥️ **看自己的 IP**:从多个 IPv4 和 IPv6 来源检测显示本机的 IP +* 🕵️ **看 IP 信息**:显示所有 IP 的相关信息,包括国家、地区、ASN、地理位置等 +* 🚦 **可用性检测**:检测一些网站的可用性:Google, Github, Youtube, 网易, 百度等 +* 🚥 **WebRTC 检测**:查看使用 WebRTC 连接时使用的 IP +* 🛑 **DNS 泄露检测**:查看 DNS 出口信息,以便查看在 VPN/代理的情况下,是否存在 DNS 泄露隐私的风险 +* 🌗 **暗黑模式**:根据系统设置自动切换暗黑/白天模式,也可以手动切换 +* 📱 **简约模式**:为移动版提供的专门模式,缩短页面长度,快速查看最重要的信息 +* 🔍 **查任意 IP 信息**:可以通过小工具查询任意 IP 的信息 +* 📲 **支持 PWA**:可以添加为手机桌面应用以及电脑里的 Chrome 应用 +* 🚀 **网速测试**:利用边缘网络进行网速测试 +* ⌨️ **支持快捷键**:可以随时输入 `?` 查看快捷键菜单 +* 🌍 根据可用性检测结果,返回目前是否可以访问全世界网络的提示 +* 🇺🇸 🇨🇳 支持中文和英文 + +## 📕 如何使用 + +3 种部署方式: + +### 在 Node 环境部署 + +确保你系统里已经有 Node.js 环境。 + +克隆代码: + +```bash +git clone https://github.com/jason5ng32/MyIP.git +``` + +安装: + +```bash +npm install +``` + +运行: + +```bash +npm start +``` + +程序会运行在 8966 端口。 + +如果你想添加 Bing 地图,在启动之前,进行如下修改: + +创建环境变量: + +```bash +mv .env.example .env +``` + +修改 `.env` 里的 Bing 地图 API Key 以及你的域名(防止滥用)。 + +```bash +BING_MAP_API_KEY="YOUR_KEY_HERE" +ALLOWED_DOMAINS="example.com" +``` + +如果你先使用 IPinfo.io 的 API,可以添加: + +```bash +IPINFO_API_TOKEN="YOUR_TOKEN_HERE" +``` + +### 使用 Vercel + +点击顶部的部署到 Vercel 按钮,即可完成部署。 + +如果希望展示地图,则在部署的时候,添加下面 2 个环境变量: + +```bash +BING_MAP_API_KEY +ALLOWED_DOMAINS +``` + +如果你想使用 IPinfo.io 的 API,可以添加: + +```bash +IPINFO_API_TOKEN +``` + +### 使用 Docker + +点击顶部的部署到 Docker 按钮,即可完成部署,又或者,直接输入下面的命令: + +```bash +docker run -d -p 8966:8966 --name myip --restart always jason5ng32/myip:latest +``` + +如果你希望展示地图,则在部署的时候,设置 Bing Map API Key 和允许的域名: + +```bash +docker run -d -p 8966:8966 \ + -e BING_MAP_API_KEY="YOUR_KEY_HERE" \ + -e ALLOWED_DOMAINS="example.com" \ + --name myip \ + jason5ng32/myip:latest + +``` + +如果你希望同时使用 IPinfo.io 的 API: + +```bash +docker run -d -p 8966:8966 \ + -e BING_MAP_API_KEY="YOUR_KEY_HERE" \ + -e ALLOWED_DOMAINS="example.com" \ + -e IPINFO_API_TOKEN="YOUR_TOKEN_HERE" \ + --name myip \ + jason5ng32/myip:latest + +``` + +## 👩🏻‍💻 高级用法 + +如果你在通过代理上网,可以考虑在你的代理配置里,增加下面的规则(请根据你使用的客户端进行修改),这样就可以实现同时查询真实 IP 和代理后的 IP: + +```ini +# IP Testing +IP-CIDR,1.0.0.1/32,DIRECT,no-resolve +IP-CIDR6,2606:4700:4700::1111/128,DIRECT,no-resolve +DOMAIN-SUFFIX,ipify.org,Proxy +``` + +## 😶‍🌫️ 额外说明 + +这个程序的 70% 的代码不是我写的,是通过 ChatGPT 写的。大概来回 90 个回合,外加一些细微的手动修改,完成了全部代码。 + +## 🌟 Star History + +[![Star History Chart](https://api.star-history.com/svg?repos=jason5ng32/MyIP&type=Date)](https://star-history.com/#jason5ng32/MyIP&Date) \ No newline at end of file diff --git a/apps/myip/data.yml b/apps/myip/data.yml new file mode 100644 index 00000000..9acdcef6 --- /dev/null +++ b/apps/myip/data.yml @@ -0,0 +1,20 @@ +name: MyIP +tags: + - 工具 +title: 一个更好的 IP 工具箱 +type: 工具 +description: 一个更好的 IP 工具箱 +additionalProperties: + key: myip + name: MyIP + tags: + - Tool + shortDescZh: 一个更好的 IP 工具箱 + shortDescEn: A better IP Toolbox + type: tool + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://ipcheck.ing + github: https://github.com/jason5ng32/MyIP + document: https://github.com/jason5ng32/MyIP diff --git a/apps/myip/latest/.env.sample b/apps/myip/latest/.env.sample new file mode 100644 index 00000000..f05e8019 --- /dev/null +++ b/apps/myip/latest/.env.sample @@ -0,0 +1,5 @@ +CONTAINER_NAME="myip" +PANEL_APP_PORT_HTTP="40191" +ALLOWED_DOMAINS="" +BING_MAP_API_KEY="" +IPINFO_API_TOKEN="" diff --git a/apps/myip/latest/data.yml b/apps/myip/latest/data.yml new file mode 100644 index 00000000..d3371f40 --- /dev/null +++ b/apps/myip/latest/data.yml @@ -0,0 +1,31 @@ +additionalProperties: + formFields: + - default: 40191 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + required: true + rule: paramPort + type: number + - default: '' + edit: true + envKey: BING_MAP_API_KEY + labelEn: Bing Map API Key + labelZh: Bing 地图 API Key + required: false + type: text + - default: '' + edit: true + envKey: IPINFO_API_TOKEN + labelEn: IPInfo.io API + labelZh: IPinfo.io 的 API + required: false + type: text + - default: "example.com" + edit: true + envKey: ALLOWED_DOMAINS + labelEn: Allowed domains + labelZh: 允许的域名 + required: false + type: text diff --git a/apps/myip/latest/docker-compose.yml b/apps/myip/latest/docker-compose.yml new file mode 100644 index 00000000..876d37b2 --- /dev/null +++ b/apps/myip/latest/docker-compose.yml @@ -0,0 +1,20 @@ +version: '3' +services: + myip: + container_name: ${CONTAINER_NAME} + restart: always + networks: + - 1panel-network + ports: + - "${PANEL_APP_PORT_HTTP}:8966" + environment: + - BING_MAP_API_KEY=${BING_MAP_API_KEY} + - ALLOWED_DOMAINS=${ALLOWED_DOMAINS} + - IPINFO_API_TOKEN=${IPINFO_API_TOKEN} + image: jason5ng32/myip:latest + labels: + createdBy: "Apps" + +networks: + 1panel-network: + external: true diff --git a/apps/myip/logo.png b/apps/myip/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..cc255bc27a321efbd69aa9a2b005c4ac922286a7 GIT binary patch literal 1797 zcmai#X*3&%9>p0`Riqf>k+h*2YAll$8QN5ANvyFnysE93SW>lhEa{TcB{JhkBBZGo zLxo^$rBxcWR9kDRC6U%v8AH&Bv7}-x_4K^+-q&}}`Q7_J_uK!|&GPkj1*n2l6%-Tz z?rtdTel~tZMQPtvwb%DuVbK@kkKX&Q_6sjBFD8?jo0~f_GIH?XK_ZcO?%cWa=g;fw z>rYNjc6D_%G&DdU5G^e&006MPz1`p6fBW`rJRWarYdbM9!Dh3~%*=p5pja$UOH0$y z(b?G8kjZ2u5($AoK%vlug@wVv!TS38va+)L{Co<9;_2yWX=y2!%jf3ighF9$ZEay; zVOCaFQc_Y#NQj%8o3XL+`}gmgnwkOw0~Z$;+uGW=Ty9lW6`4#94-a>Ablln5>Few3 z=;&avSjoxBadB}t9M0L<*~G-8va%A5MoT1;v9Ymd&z{lg^ihiox%+>9lY;g3TbZ^n zuNNpN9O!mOIr(25Uld*T8+ZI(IlMJ{Vwr&I4At~?M0dr$oNj9RvR5pWVi4tX7J&mU zoo}u=Jhh&;?p+fZ8AmMi5BJRW-yeMu7tg+)Em)6$adiGiV~qqeeVX{7Uv>2g0IY(Z zy)5mlK6RA9U)_B~D*JRL!m5s)&Dy=$Map(I0 zzEZKjNvfyb*Ai+9o_UVCAR-HVbPhwJ12%h*%8tr{gUZH_;^kA4uX%h-`k+Q;Se+^>euX4Ew1-X7Crs^ZDVk%7R9K`^Ld6RE;uTiM)tO$ z7u^+ckv3el(Pjg4Wqz0sCFPgXhWE95d%*3yA^zhUFa%kr)BPD{@EA>)9H^y!iLGEj z!g9rf$r24q5M1bl43%SkV>~N;o<>0H z`t+Nq061mYO02S*5>o+P&o$&Glwu)*LM3@RpBU;mm-7eKw!OH9AGlhiekORi)`k^$ zo0hk5Tu!QutW*>IT_rdaYl1W1GDYdRKB`82oc*PxoNincU6>t_IwcJ3Eb>M|V@gpc z!FJo*jHUea)4@EYMg|9jMC`4#_*g8jeDFxwn7lkoS$+7I;)l&Hc8zu9X>AG>wDK`M zhLLde$HbQMmRPk@SlyS2ligV8-M%u*lo{}`8zC;zX?4S}2U7pmw_jMpsLyelyX)<5 zdu+M7y2)^){o}LRanjPx^?QFmY?A*Tgp&Tu_S2;*jjp;eo*q7&8PCQL^ZV#Z*HbOE z`fhz1vIM1{gg!dl>duP<)MVc*jt(8Iz_#RLl>nD0bfis26y{y`R;Co=t3e&nB-zgt z1z`}8H(_OeIiwgthkF)A4$P?AH2lP;%X!^qGNNY1Md6D~2mmm@^?P%32H2yZIVtYt zI@%dIglGMheb3tjr%TI8y6EDH1i29gaYb<1Kit%+MVg?z=h=`w>Dt4l^-P?yw}v{W z1Vcw~$4!4Y3j|sbOS^So_YMtbyl?b>hm2C9HgJ%Q-8v?PQ@JPBpj0KzMEM=X-*#wYX2t