├── CNAME
├── public
├── CNAME
└── static
│ ├── CNAME
│ ├── wx.jpg
│ ├── cli.png
│ ├── pc2.png
│ ├── scan.png
│ ├── pc_home.png
│ ├── guide
│ ├── cli.png
│ ├── dict.png
│ ├── group.png
│ ├── login.png
│ ├── other.png
│ ├── phone.jpg
│ ├── infoGet.png
│ ├── creatTask.png
│ ├── pluginInfo.png
│ └── pluginRule.png
│ ├── task_info.png
│ ├── wx_qrcode.jpg
│ ├── phone_home.png
│ └── scan.svg
├── src
├── index.md
├── Container
│ └── index.tsx
├── Footer
│ ├── index.less.d.ts
│ ├── index.less
│ └── index.tsx
├── Brand
│ ├── index.less.d.ts
│ ├── index.less
│ └── index.tsx
├── index.tsx
├── Features
│ ├── index.less
│ └── index.tsx
├── Banner
│ ├── index.less
│ └── index.tsx
└── Apply
│ ├── index.less
│ └── index.tsx
├── tsconfig.json
├── .gitignore
├── .github
└── workflows
│ └── gh-pages.yml
├── config
└── config.js
├── docs
├── change
│ └── index.md
└── guide
│ └── index.md
├── README.md
└── package.json
/CNAME:
--------------------------------------------------------------------------------
1 | heartsk.com
2 |
--------------------------------------------------------------------------------
/public/CNAME:
--------------------------------------------------------------------------------
1 | heartsk.com
--------------------------------------------------------------------------------
/public/static/CNAME:
--------------------------------------------------------------------------------
1 | heartsk.com
2 |
--------------------------------------------------------------------------------
/public/static/wx.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yqcs/heartsk_community/HEAD/public/static/wx.jpg
--------------------------------------------------------------------------------
/public/static/cli.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yqcs/heartsk_community/HEAD/public/static/cli.png
--------------------------------------------------------------------------------
/public/static/pc2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yqcs/heartsk_community/HEAD/public/static/pc2.png
--------------------------------------------------------------------------------
/public/static/scan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yqcs/heartsk_community/HEAD/public/static/scan.png
--------------------------------------------------------------------------------
/public/static/pc_home.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yqcs/heartsk_community/HEAD/public/static/pc_home.png
--------------------------------------------------------------------------------
/public/static/guide/cli.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yqcs/heartsk_community/HEAD/public/static/guide/cli.png
--------------------------------------------------------------------------------
/public/static/task_info.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yqcs/heartsk_community/HEAD/public/static/task_info.png
--------------------------------------------------------------------------------
/public/static/wx_qrcode.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yqcs/heartsk_community/HEAD/public/static/wx_qrcode.jpg
--------------------------------------------------------------------------------
/src/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | gapless: true
3 | title: Home
4 | ---
5 |
6 |
7 |
--------------------------------------------------------------------------------
/public/static/guide/dict.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yqcs/heartsk_community/HEAD/public/static/guide/dict.png
--------------------------------------------------------------------------------
/public/static/guide/group.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yqcs/heartsk_community/HEAD/public/static/guide/group.png
--------------------------------------------------------------------------------
/public/static/guide/login.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yqcs/heartsk_community/HEAD/public/static/guide/login.png
--------------------------------------------------------------------------------
/public/static/guide/other.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yqcs/heartsk_community/HEAD/public/static/guide/other.png
--------------------------------------------------------------------------------
/public/static/guide/phone.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yqcs/heartsk_community/HEAD/public/static/guide/phone.jpg
--------------------------------------------------------------------------------
/public/static/phone_home.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yqcs/heartsk_community/HEAD/public/static/phone_home.png
--------------------------------------------------------------------------------
/public/static/guide/infoGet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yqcs/heartsk_community/HEAD/public/static/guide/infoGet.png
--------------------------------------------------------------------------------
/public/static/guide/creatTask.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yqcs/heartsk_community/HEAD/public/static/guide/creatTask.png
--------------------------------------------------------------------------------
/public/static/guide/pluginInfo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yqcs/heartsk_community/HEAD/public/static/guide/pluginInfo.png
--------------------------------------------------------------------------------
/public/static/guide/pluginRule.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yqcs/heartsk_community/HEAD/public/static/guide/pluginRule.png
--------------------------------------------------------------------------------
/src/Container/index.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const Container: React.FC<{ children: React.ReactNode }> = ({ children }) => {
4 | return
40 |
--------------------------------------------------------------------------------
/src/Footer/index.less:
--------------------------------------------------------------------------------
1 | .link {
2 | color: #5d6494;
3 |
4 | &:hover {
5 | color: #1890ff;
6 | }
7 | }
8 |
9 | .footer {
10 | width: 55%;
11 | margin: 0 auto;
12 | }
13 |
14 | .column {
15 | margin-top: 10%;
16 | }
17 |
18 | .label {
19 | margin-bottom: 20px;
20 | font-weight: 700;
21 | font-size: 14px;
22 | }
23 |
24 | .item {
25 | margin-bottom: 10px;
26 | }
27 |
28 | .meta {
29 | padding: 10px 0 60px;
30 | }
31 |
32 | .iconWrap {
33 | display: inline-block;
34 | margin-left: 18px;
35 | padding: 5px 7px;
36 | border: 1px solid #d5dbf2;
37 | border-radius: 50%;
38 | cursor: pointer;
39 | transition: background-color 0.3s;
40 |
41 | &:hover {
42 | background-color: currentColor;
43 |
44 | .icon {
45 | color: #fff;
46 | }
47 | }
48 | }
49 |
50 | .icon {
51 | font-size: 20px;
52 | }
53 |
--------------------------------------------------------------------------------
/src/Features/index.less:
--------------------------------------------------------------------------------
1 | .features {
2 | margin-top: 15%;
3 | }
4 |
5 | .title {
6 | margin-bottom: 5%;
7 | color: #3b426b;
8 | font-size: 36px;
9 | text-align: center;
10 | @media (max-width: 1200px) {
11 | margin-top: 30%;
12 | margin-bottom: 10%;
13 | }
14 | }
15 |
16 | .zdyDivC {
17 | margin: 0 auto;
18 | @media (min-width: 1200px) {
19 | width: 60%;
20 | }
21 | }
22 | .card {
23 | margin-top: 10%;
24 | }
25 | .card + .card {
26 | color: #3a416f;
27 | border-left: 1px solid #e1e7ff;
28 | }
29 |
30 | &:hover {
31 | color: inherit;
32 | }
33 |
34 | & + & {
35 | border-left: 1px solid #e1e7ff;
36 | }
37 |
38 | .normal {
39 | text-align: center;
40 |
41 | .cardTitle {
42 | margin-bottom: 16px;
43 | font-size: 20px;
44 | }
45 | }
46 |
47 | .summary {
48 | color: #5d6494;
49 | line-height: 1.6;
50 | }
51 |
--------------------------------------------------------------------------------
/src/Banner/index.less:
--------------------------------------------------------------------------------
1 | .slide {
2 | background-color: #fff;
3 | }
4 |
5 | .content {
6 | height: 550px;
7 | margin-top: 3%;
8 | color: #fff;
9 | @media (max-width: 750px) {
10 | height: 550px;
11 | }
12 |
13 | &.black {
14 | color: #3b426b;
15 | }
16 |
17 | .left {
18 | float: right;
19 | margin-top: 14%;
20 | @media (min-width: 750px) {
21 | width: 65%;
22 | }
23 | }
24 |
25 | .heatImg {
26 | border-radius: 4px;
27 | cursor: pointer;
28 | @media (max-width: 750px) {
29 | height: 30%;
30 | margin-top: 5%;
31 | }
32 | }
33 |
34 | .title {
35 | margin-bottom: 15px;
36 | font-weight: 700;
37 | font-size: 38px;
38 | }
39 |
40 | .summary {
41 | margin-bottom: 40px;
42 | font-size: 18px;
43 | }
44 | }
45 |
46 | .download {
47 | display: inline;
48 | margin: 0 5px;
49 | padding: 8px 16px;
50 | color: #fff;
51 | font-size: 18px;
52 | background-color: #172b4d;
53 | border-radius: 3px;
54 | cursor: pointer;
55 | user-select: none;
56 | }
57 |
--------------------------------------------------------------------------------
/src/Apply/index.less:
--------------------------------------------------------------------------------
1 | .apply {
2 | padding-bottom: 5%;
3 |
4 | .title {
5 | font-weight: 400;
6 | font-size: 36px;
7 | }
8 |
9 | .subtitle {
10 | margin: 20px 0 50px;
11 | color: #5d6494;
12 | font-size: 18px;
13 | }
14 |
15 | .contentDark {
16 | display: block;
17 | background-color: #f1f2f6;
18 | }
19 |
20 | .zdyDiv {
21 | margin-top: 10%;
22 | margin-bottom: 10%;
23 | }
24 |
25 | .container {
26 | box-sizing: border-box;
27 | margin: 0 auto;
28 | }
29 |
30 | .platform {
31 | width: 65%;
32 | margin: 0 auto;
33 | text-align: center;
34 | }
35 |
36 | .platform > div {
37 | color: #172b4d;
38 | font-size: 16px;
39 | text-align: center;
40 | }
41 |
42 | .remark {
43 | padding: 20px 0;
44 | }
45 |
46 | .download {
47 | display: inline;
48 | margin: 0 5px;
49 | padding: 8px 16px;
50 | color: #fff;
51 | font-size: 14px;
52 | background-color: #172b4d;
53 | border-radius: 3px;
54 | cursor: pointer;
55 | user-select: none;
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/src/Brand/index.less:
--------------------------------------------------------------------------------
1 | .brand {
2 | padding: 5px 0;
3 | }
4 |
5 | .content {
6 | margin: 5% auto 0;
7 | padding-top: 10%;
8 | padding-bottom: 5%;
9 | text-align: center;
10 | background-color: #f1f2f6;
11 | }
12 |
13 | .content2 {
14 | margin: 5% auto 0;
15 | padding-top: 10%;
16 | text-align: center;
17 | }
18 |
19 | .title {
20 | margin: 0 auto;
21 | font-weight: 400;
22 | font-size: 36px;
23 | }
24 |
25 | .desc {
26 | margin-top: 1%;
27 | color: #505f79;
28 | font-size: 16px;
29 | line-height: 1.75;
30 | }
31 |
32 | .homeDiv {
33 | width: 75%;
34 | margin-top: 2%;
35 |
36 | .pc img {
37 | position: relative;
38 | left: 30%;
39 | z-index: 2;
40 | width: 100%;
41 | }
42 |
43 | .phone img {
44 | position: absolute;
45 | left: 10%;
46 | z-index: 1;
47 | width: 20%;
48 | margin-top: 5%;
49 | }
50 | }
51 |
52 | .cli img {
53 | position: absolute;
54 | left: 10%;
55 | z-index: 1;
56 | width: 70%;
57 | }
58 |
59 | .web img {
60 | position: relative;
61 | left: 30%;
62 | z-index: 2;
63 | width: 100%;
64 | margin-top: 5%;
65 | }
66 |
--------------------------------------------------------------------------------
/src/Banner/index.tsx:
--------------------------------------------------------------------------------
1 | import { Carousel, Col, Row } from "antd";
2 | import classnames from "classnames";
3 | import React from "react";
4 | import styles from "./index.less";
5 |
6 | const Banner = () => {
7 | return (
8 |
29 |
30 |
42 |
43 | 系统内置了两个权限的账户,管理员与具有较高权限的高级用户,默认均是启用状态。
44 |
45 | > 管理员:heartsk/heartsk
46 | >
47 | > 高级用户:superuser/superuser
48 |
49 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "name": "dumi-site",
4 | "version": "1.0.0",
5 | "scripts": {
6 | "start": "dumi dev",
7 | "docs:build": "dumi build",
8 | "docs:deploy": "gh-pages -d dist",
9 | "build": "father-build",
10 | "prettier": "prettier --write \"**/*.{js,jsx,tsx,ts,less,md,json}\"",
11 | "test": "umi-test",
12 | "test:coverage": "umi-test --coverage",
13 | "prepublishOnly": "npm run build"
14 | },
15 | "module": "es/index.js",
16 | "typings": "es/index.d.ts",
17 | "gitHooks": {
18 | "pre-commit": "lint-staged"
19 | },
20 | "lint-staged": {
21 | "*.{js,jsx,less,md,json}": [
22 | "prettier --write"
23 | ],
24 | "*.ts?(x)": [
25 | "prettier --parser=typescript --write"
26 | ]
27 | },
28 | "dependencies": {
29 | "@ant-design/icons": "^4.7.0",
30 | "@types/node": "^17.0.38",
31 | "antd": "^4.20.7",
32 | "flex.css": "^1.1.7",
33 | "prettier-plugin-organize-imports": "^2.3.4",
34 | "react": "^18.1.0"
35 | },
36 | "devDependencies": {
37 | "@testing-library/jest-dom": "^5.16.4",
38 | "@testing-library/react": "^13.3.0",
39 | "@types/jest": "^27.5.1",
40 | "@umijs/fabric": "^2.10.0",
41 | "@umijs/test": "^3.5.24",
42 | "babel-plugin-import": "^1.13.5",
43 | "dumi": "^1.1.42",
44 | "father-build": "^1.22.2",
45 | "gh-pages": "^4.0.0",
46 | "lint-staged": "^12.5.0",
47 | "prettier": "^2.6.2",
48 | "yorkie": "^2.0.0"
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/src/Brand/index.tsx:
--------------------------------------------------------------------------------
1 | import { Divider } from "antd";
2 | import React from "react";
3 | import styles from "./index.less";
4 |
5 | const Brand = () => {
6 | return (
7 |
19 |
22 |
35 |
38 |
19 |
47 |
48 | 系统内置了两个权限的账户,管理员与具有较高权限的高级用户,默认均是启用状态。
49 |
50 | > 管理员:heartsk/heartsk
51 | >
52 | > 高级用户:superuser/superuser
53 |
54 | ### CLI 命令行
55 |
56 | 命令行模式无需授权及公钥文件,但是只具有基础的扫描模块,无法使用 WEB 模式的扫描配置以及信息收集等高级功能。执行-h 命令可获取相关帮助。
57 |
58 | ```bash
59 | $ ./HeartsK -h
60 | $ ./HeartsK -t 127.0.0.1 -p 1-500,3000-6000
61 | ```
62 |
63 |
64 |
65 | ### Linux For ARM(Android)
66 |
67 | #### 具有 Root 权限可以避免百分之九十的问题!
68 |
69 | 安卓设备为例,直接使用 adb push 推送到 `/data/local/tmp/`目录,然后使用`chmod +x `赋予可执行权限即可直接运行。该方案不便随时运行,可使用终端软件 Termux 支撑。
70 |
71 | 下载终端工具[Termux](https://termux.com/) ,打开软件之后更新软件包然后安装 wget,再下载二进制程序。
72 |
73 | ```bash
74 | $ pkg update
75 | $ pkg upgrade
76 | $ pkg install wget
77 | $ wget https://github.com/yqcs/heartsk_community/releases/download/LOWBUG@Latest/HeartsK_linux_arm64.zip
78 | $ unzip HeartsK_linux_arm64.zip
79 | $ cd HeartsK_linux_arm64
80 | $ chmod +x HeartsK
81 | $ ./HeartsK
82 | ```
83 |
84 | 未授予 Root 权限会出现错误:` listen tcp 0.0.0.0:80: bind: permission denied`,使用-port 参数切换绑定端口即可。
85 |
86 | 执行扫描任务时出现错误:`xx on [::1]:53: read udp [::1]:37606->[::1]:53: read: connection refused`
87 |
88 | > 有 ROOT 权限:在手机根目录的 /etc/ 文件夹下新建一个名为 resolv.conf 的文件,内容为`nameserver 8.8.8.8`(DNS 服务器),然后重启 Termux 之后再次运行即可。
89 | >
90 | > 无 ROOT 权限:执行`pkg install proot resolv-conf && proot -b $PREFIX/etc/resolv.conf:/etc/resolv.conf ./heartsk -port 8000`(运行参数)
91 | > 至此,便可成功启动,在手机浏览器访问首页:http://127.0.0.1:8000 但是并不代表可以完整使用了,以非 ROOT 权限执行任务时切记将存活检测切换为 Ping 模式!!
92 |
93 |
94 |
95 | ## 系统结构
96 |
97 | 系统功能列表如下:
98 |
99 |
354 |
--------------------------------------------------------------------------------