[SecuriSuite] Architecture & API

 

본 프로젝트는 [SecuriSuite]로, SecuriSuite는 브라우저에서 정보 보안 도구를 사용하기 위한 그래픽 인터페이스입니다.

사용자는 웹 UI를 통해 nmap, crunch, httrack, johnTheRipper 등의 보안 도구를 직접 사용할 수 있습니다.

이 프로젝트는 Kali Linux 도구를 참조로 사용합니다.


데이터 처리 아키텍처 및 각 API에 대한 완성된 예시입니다.

이 예시는 실제 프로젝트에서 나온 것입니다.

 

데이터 처리 아키텍처

1. Interfaces 계층

- 이 계층은 사용자 또는 외부 시스템으로부터 데이터를 수신합니다.

- 수신된 데이터는 DTO(Data Transfer Object) 형태의 Request로 캡슐화되어 다음 단계로 전달됩니다.

2. Facade 계층

- DTO(Request)를 받아 Command 객체로 변환하는 역할을 합니다.

- 이곳에서 다양한 외부 시스템의 연계를 관리하고 통합하는 중앙 지점 역할을 합니다.

3. Domain 계층

- Command 객체를 Domain 객체로 변환합니다.

- 이곳에서 비즈니스 로직이 구현되며, 데이터의 실제 처리가 이루어집니다.

- Domain 계층은 핵심 비즈니스 규칙과 데이터의 무결성을 관리합니다.

- 데이터 처리 결과를 Info 객체로 변환합니다.

- Info 객체는 처리된 데이터를 요약하거나 표현하는데 사용됩니다.

4. Infrastructure 계층

- 이 프로젝트에서는 Spring Data JPA를 사용하여 MariaDB 데이터베이스와의 상호작용 관리합니다.

5. 응답

- 처리된 데이터는 최종적으로 DTO(Response) 형태로 변환되어 사용자 또는 요청자에게 응답됩니다.

API

Nmap

/api/v1/nmap

 

Request

URL : /api/v/nmap/execute

Method : POST

Auth required : NO

 

데이터 제약

{
  "option": "[ALL 또는 SET]",
  "ip": "[아이피]",
  "port": "[포트]"
}

데이터 예시

{
  "option": "ALL",
  "ip": "172.16.234.1"
}
 

또는

{
  "option": "SET",
  "ip": "172.16.234.1",
  "port": "80"
}
 

Response

Code : 200 OK

성공 응답

{
  "result": "SUCCESS",
  "data": {
    "option": "ALL",
    "ip": "172.16.234.1",
    "port": null,
    "cmd": "nmap -all 172.16.234.1 ",
    "regDts": "20240112154624",
    "logName": "20240112154624_nmap.txt",
    "log": "Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-01-12 15:46 KST\nNmap scan report for 172.16.234.1\nHost is up (0.0021s latency).\nNot shown: 999 closed tcp ports (conn-refused)\nPORT     STATE SERVICE\n3306/tcp open  mysql\n\nNmap done: 1 IP address (1 host up) scanned in 0.67 seconds\n",
    "time": "0.67",
    "result": {
      "1": {
        "port": "3306",
        "state": "open",
        "service": "mysql"
      }
    }
  },
  "message": null
}
 

실패 응답 1

조건 : IP가 없는 경우

Code : 200 OK

내용 :

{
  "result": "FAIL",
  "data": null,
  "message": "적절하지 않은 요청입니다.Validation failed for argument [0] in public com.security.securisuite.common.response.CommonResponse com.security.securisuite.nmap.interfaces.NmapApiController.execute(com.security.securisuite.nmap.interfaces.dto.NmapDto$NmapRequest): [Field error in object 'nmapRequest' on field 'ip': rejected value []; codes [NotEmpty.nmapRequest.ip,NotEmpty.ip,NotEmpty.java.lang.String,NotEmpty]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [nmapRequest.ip,ip]; arguments []; default message [ip]]; default message [IP는 필수값입니다.]] "
}
 

실패 응답 2

조건 : 포트가 지정되지 않은 경우

Code : 200 OK

내용 :

{
  "result": "FAIL",
  "data": null,
  "message": "포트 지정은 필수입니다."
}
 

Crunch

/api/v1/crunch

1. Execute

Request

URL : /api/v1/crunch/execute

Method : POST

Auth required : NO

 

데이터 제약

{
  "minWord": "[최소길이]",
  "maxWord": "[최대길이]",
  "words": "[모든문자]"
}
 

데이터 예시

{
  "minWord": 8,
  "maxWord": 8,
  "words": "0123456789"
}
 

Response

Code : 200 OK

성공 응답

{
  "result": "SUCCESS",
  "data": {
    "minWord": 8,
    "maxWord": 8,
    "words": "0123456789",
    "cmd": "/bin/sh -c crunch 8 8 0123456789 -o ./logs/20240112155626_crunch.txt > ./logs/20240112155626_crunch_output.txt 2>&1 & ",
    "regDts": "20240112155626",
    "logName": "20240112155626_crunch.txt",
    "log": "Crunch will now generate the following amount of data: 900000000 bytes\n858 MB\n0 GB\n0 TB\n0 PB\nCrunch will now generate the following number of lines: 100000000 \n",
    "crunchResult": {
      "amountByte": "900000000",
      "amountMb": "858",
      "amountGb": "0",
      "amountTb": "0",
      "amountPb": "0",
      "amountLine": "100000000"
    }
  },
  "message": null
}
 

- 응답받은 regDts를 통해 진행 상태를 확인할 수 있습니다.

 

실패 응답 1

조건 : 최소 길이가 0이하 이거나 13이상일 경우

Code : 200 OK

내용 :

{
  "result": "FAIL",
  "data": null,
  "message": "적절하지 않은 요청입니다.Validation failed for argument [0] in public com.security.securisuite.common.response.CommonResponse com.security.securisuite.crunch.interfaces.CrunchApiController.execute(com.security.securisuite.crunch.interfaces.dto.CrunchDto$CrunchRequest): [Field error in object 'crunchRequest' on field 'minWord': rejected value [0]; codes [Min.crunchRequest.minWord,Min.minWord,Min.int,Min]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [crunchRequest.minWord,minWord]; arguments []; default message [minWord],1]; default message [최소값은 1 이상이어야 합니다.]] "
}
 

실패 응답 2

조건 : 최대 길이가 0이하 이거나 13이상일 경우

Code : 200 OK

내용 :

{
  "result": "FAIL",
  "data": null,
  "message": "적절하지 않은 요청입니다.Validation failed for argument [0] in public com.security.securisuite.common.response.CommonResponse com.security.securisuite.crunch.interfaces.CrunchApiController.execute(com.security.securisuite.crunch.interfaces.dto.CrunchDto$CrunchRequest): [Field error in object 'crunchRequest' on field 'maxWord': rejected value [13]; codes [Max.crunchRequest.maxWord,Max.maxWord,Max.int,Max]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [crunchRequest.maxWord,maxWord]; arguments []; default message [maxWord],12]; default message [최대값은 12 이하여야 합니다.]] "
}
 

실패 응답 3

조건 : 문자가 입력되지 않은 경우

Code : 200 OK

내용 :

{
  "result": "FAIL",
  "data": null,
  "message": "적절하지 않은 요청입니다.Validation failed for argument [0] in public com.security.securisuite.common.response.CommonResponse com.security.securisuite.crunch.interfaces.CrunchApiController.execute(com.security.securisuite.crunch.interfaces.dto.CrunchDto$CrunchRequest): [Field error in object 'crunchRequest' on field 'words': rejected value []; codes [Size.crunchRequest.words,Size.words,Size.java.lang.String,Size]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [crunchRequest.words,words]; arguments []; default message [words],2147483647,1]; default message [문자열은 필수값입니다.]] "
}
 

2. Progress

URL : /api/v1/crunch/progress

Method : POST

Auth required : NO

데이터 제약

{
  "regDts": "[execute 작업을 통해 전달받은 regDts]"
}
 

데이터 예시

{
  "regDts": "20240112155626"
}
 

Response

Code : 200 OK

성공 응답

{
  "result": "SUCCESS",
  "data": {
    "regDts": "20240112160420",
    "log": "crunch:  23% completed generating output\n",
    "percent": "23%"
  },
  "message": null
}
 

- 0% ~ 100%의 값을 전달받을 수 있습니다.

Httrack

/api/v1/httrack

해당 기능을 이용하기 위해서, 먼저 패키지를 설치해야 합니다.

sudo apt install httrack
 

1. Execute

Request

URL : /api/v1/httrack/execute

Method : POST

Auth required : NO

데이터 제약

{
  "url": "[크롤링 하고자 하는 URL]"
}
 

데이터 예시

{
  "url": "http://hoowave.dothome.co.kr"
}
 

Response

Code : 200 OK

성공 응답

{
  "result": "SUCCESS",
  "data": {
    "url": "http://hoowave.dothome.co.kr",
    "transUrl": "20240117173342_http_hoowave_dothome_co_kr",
    "cmd": "/bin/sh -c (mkdir /var/www/html/download/files/20240117173342_http_hoowave_dothome_co_kr && httrack http://hoowave.dothome.co.kr -O /var/www/html/download/files/20240117173342_http_hoowave_dothome_co_kr -%v > /var/www/html/download/logs/20240117173342_httrack.txt && zip -r /var/www/html/download/files/20240117173342_http_hoowave_dothome_co_kr.zip /var/www/html/download/files/20240117173342_http_hoowave_dothome_co_kr && rm -rf /var/www/html/download/files/20240117173342_http_hoowave_dothome_co_kr) > /var/www/html/download/logs/20240117173342_tempLog.txt 2>&1 & ",
    "regDts": "20240117173342",
    "logName": "20240117173342_httrack.txt",
    "tempLog": "20240117173342_tempLog.txt"
  },
  "message": null
}
 

- 작업 명령을 내린 URL과 응답받은 regDts를 통해 진행 상태를 확인할 수 있습니다.

 

실패 응답

조건 : URL이 입력되지 않은 경우

Code : 200 OK

내용 :

{
    "result": "FAIL",
    "data": null,
    "message": "적절하지 않은 요청입니다.Validation failed for argument [0] in public com.security.securisuite.common.response.CommonResponse com.security.securisuite.httrack.interfaces.HttrackApiController.execute(com.security.securisuite.httrack.interfaces.dto.UrlRequest): [Field error in object 'urlRequest' on field 'url': rejected value []; codes [NotEmpty.urlRequest.url,NotEmpty.url,NotEmpty.java.lang.String,NotEmpty]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [urlRequest.url,url]; arguments []; default message [url]]; default message [URL은 필수값입니다.]] "
}
 

2. Completion

Request

URL : /api/v1/httrack/completion

Method : POST

Auth required : NO

데이터 제약

{
  "url": "[execute 작업 명령을 내린 URL]",
  "regDts": "[execute 작업을 통해 전달받은 regDts]"
}
 

데이터 예시

{
  "url": "http://hoowave.dothome.co.kr",
  "regDts": "20240117173850"
}
 

Response

Code : 200 OK

성공 응답 1

{
  "result": "SUCCESS",
  "data": {
    "url": "http://hoowave.dothome.co.kr",
    "regDts": "20240117173851",
    "transUrl": "http_hoowave_dothome_co_kr",
    "fileName": "20240117173851_http_hoowave_dothome_co_kr.zip",
    "logName": "20240117173851_httrack.txt",
    "tempLog": "20240117173851_tempLog.txt",
    "complete": false,
    "message": "유효한 작업이 아닙니다."
  },
  "message": null
}
 

- 해당 작업이 존재하지 않을 경우

 

성공 응답 2

{
  "result": "SUCCESS",
  "data": {
    "url": "http://hoowave.dothome.co.kr",
    "regDts": "20240117173850",
    "transUrl": "http_hoowave_dothome_co_kr",
    "fileName": "20240117173850_http_hoowave_dothome_co_kr.zip",
    "logName": "20240117173850_httrack.txt",
    "tempLog": "20240117173850_tempLog.txt",
    "complete": false,
    "message": "작업이 진행중입니다."
  },
  "message": null
}
 

- 작업이 진행중인 경우

 

성공 응답 3

{
  "result": "SUCCESS",
  "data": {
    "url": "http://hoowave.dothome.co.kr",
    "regDts": "20240117173850",
    "transUrl": "http_hoowave_dothome_co_kr",
    "fileName": "20240117173850_http_hoowave_dothome_co_kr.zip",
    "logName": "20240117173850_httrack.txt",
    "tempLog": "20240117173850_tempLog.txt",
    "complete": true,
    "message": "작업이 완료되었습니다."
  },
  "message": null
}
 

- 작업이 완료된 경우

 

3. Wget

Request

URL : /api/v1/httrack/wget

Method : POST

Auth required : NO

데이터 제약

{
  "url": "[미러링 하고자 하는 URL]"
}
 

데이터 예시

{
  "url": "http://hoowave.dothome.co.kr"
}
 

Response

Code : 200 OK

성공 응답

{
  "result": "SUCCESS",
  "data": {
    "url": "http://hoowave.dothome.co.kr",
    "transUrl": "20240117175830_http_hoowave_dothome_co_kr",
    "cmd": "/bin/sh -c mkdir /var/www/html/download/files/20240117175830_http_hoowave_dothome_co_kr && wget -P /var/www/html/download/files/20240117175830_http_hoowave_dothome_co_kr -m http://hoowave.dothome.co.kr > /var/www/html/download/logs/20240117175830_wget.txt 2>&1 && zip -r /var/www/html/download/files/20240117175830_http_hoowave_dothome_co_kr.zip /var/www/html/download/files/20240117175830_http_hoowave_dothome_co_kr && rm -rf /var/www/html/download/files/20240117175830_http_hoowave_dothome_co_kr ",
    "regDts": "20240117175830",
    "logName": "20240117175830_wget.txt",
    "fileName": "20240117175830_20240117175830_http_hoowave_dothome_co_kr.zip"
  },
  "message": null
}
 

- 정적인 페이지를 탐색하기 때문에, Httrack보다 비교적 속도가 빠릅니다.

 

실패 응답

조건 : URL이 입력되지 않은 경우

Code : 200 OK

내용 :

{
  "result": "FAIL",
  "data": null,
  "message": "적절하지 않은 요청입니다.Validation failed for argument [0] in public com.security.securisuite.common.response.CommonResponse com.security.securisuite.httrack.interfaces.HttrackApiController.wget(com.security.securisuite.httrack.interfaces.dto.UrlRequest): [Field error in object 'urlRequest' on field 'url': rejected value []; codes [NotEmpty.urlRequest.url,NotEmpty.url,NotEmpty.java.lang.String,NotEmpty]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [urlRequest.url,url]; arguments []; default message [url]]; default message [URL은 필수값입니다.]] "
}
 

JohnTheRipper

/api/v1/john

1. Execute

Request

URL : /api/v1/john/execute

Method : POST

Content-Type : multipart/form-data

Auth required : NO

데이터 제약 1

{
  targetFile: [압축파일 또는 문서파일]
  text: '{"johnOption": "[DEFAULT 또는 CUSTOM]"}'
}
 

데이터 예시 1

{
  targetFile: (testimg.zip)
  text: '{"johnOption": "DEFAULT"}'
}
 

데이터 제약 2

{
  targetFile: [압축파일 또는 문서파일]
  text: '{"johnOption": "[DEFAULT 또는 CUSTOM]"}'
  customList: [단어 목록]
}
 

- johnOption이 CUSTOM인 경우, customList을 필요로 합니다.

 

데이터 예시 2

{
  targetFile: (testimg.zip)
  text: '{"johnOption": "CUSTOM"}'
  customList: (20240119164309_crunch.txt)
}
 

Response

Code : 200 OK

성공 응답

{
  "result": "SUCCESS",
  "data": {
    "johnOption": "CUSTOM",
    "johnType": "ARCHIVE",
    "cmd": "/bin/sh -c zip2john /var/www/html/upload/20240119165555_testimg.zip > /var/www/html/download/logs/20240119165555_hash.txt && john -w:/var/www/html/upload/20240119165555_20240119164309_crunch.txt /var/www/html/download/logs/20240119165555_hash.txt && john /var/www/html/download/logs/20240119165555_hash.txt --show > /var/www/html/download/logs/20240119165555_johnTheRipper.txt ",
    "regDts": "20240119165555",
    "logName": "20240119165555_johnTheRipper.txt",
    "hashName": "20240119165555_hash.txt",
    "targetFileName": "20240119165555_testimg.zip",
    "customListName": "20240119165555_20240119164309_crunch.txt"
  },
  "message": null
}
 

- 응답받은 regDts를 통해 진행 상태를 확인할 수 있습니다.

 

실패 응답 1

조건 : targetFile이 입력되지 않았거나 지원하지 않는 확장자를 입력했을 경우

Code : 200 OK

내용 :

{
  "result": "FAIL",
  "data": null,
  "message": "지원하지 않는 확장자입니다."
}
 

실패 응답 2

조건 : johnOption을 입력되지 않은 경우

Code : 200 OK

{
  "result": "FAIL",
  "data": null,
  "message": "적절하지 않은 요청입니다.Validation failed for argument [0] in public com.security.securisuite.common.response.CommonResponse com.security.securisuite.johntheripper.interfaces.JohnApiController.execute(com.security.securisuite.johntheripper.interfaces.dto.JohnDto$JohnRequest): [Field error in object 'johnRequest' on field 'johnOption': rejected value [null]; codes [NotNull.johnRequest.johnOption,NotNull.johnOption,NotNull.com.security.securisuite.johntheripper.domain.JohnOption,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [johnRequest.johnOption,johnOption]; arguments []; default message [johnOption]]; default message [옵션은 필수값입니다.]] "
}
 

실패 응답 3

조건 : johnOption을 CUSTOM으로 하고 customList이 입력되지 않은 경우

Code : 200 OK

내용 :

{
  "result": "FAIL",
  "data": null,
  "message": "사용자 리스트는 필수입니다."
}
 

2. Completion

Request

URL : /api/v1/john/completion

Method : POST

Auth required : NO

데이터 제약

{
  "regDts": "[execute 작업을 통해 전달받은 regDts]"
}
 

데이터 예시

{
  "regDts": "20240119165250"
}
 

Response

Code : 200 OK

성공 응답 1

{
  "result": "SUCCESS",
  "data": {
    "regDts": "20240119165556",
    "logName": "20240119165556_johnTheRipper.txt",
    "hashName": "20240119165556_hash.txt",
    "complete": false,
    "message": "유효한 작업이 아닙니다.",
    "password": null
  },
  "message": null
}
 

- 해당 작업이 존재하지 않을 경우

 

성공 응답 2

{
  "result": "SUCCESS",
  "data": {
    "regDts": "20240119165555",
    "logName": "20240119165555_johnTheRipper.txt",
    "hashName": "20240119165555_hash.txt",
    "complete": true,
    "message": "작업이 진행중입니다.",
    "password": null
  },
  "message": null
}
 

- 작업이 진행중인 경우

 

성공 응답 3

{
  "result": "SUCCESS",
  "data": {
    "regDts": "20240119165555",
    "logName": "20240119165555_johnTheRipper.txt",
    "hashName": "20240119165555_hash.txt",
    "complete": true,
    "message": "작업이 완료되었습니다.",
    "password": "hoowave"
  },
  "message": null
}
 

- 작업이 완료된 경우

 

System

/api/v1/system

1. Execute

Request

URL : /api/v1/system/execute

Method : POST

Auth required : NO

데이터 제약

{
  "cmd": "[명령어]"
}
 

데이터 예시

{
  "cmd": "ls -al"
}
 

Response

Code : 200 OK

성공 응답

{
  "result": "SUCCESS",
  "data": {
    "cmd": "/bin/sh -c ls -al ",
    "regDts": "20240112161209",
    "logName": "20240112161209_system.txt",
    "result": "total 72\ndrwxr-xr-x 8 hoowave hoowave 4096 Jan 12 13:25 .\ndrwxr-xr-x 3 hoowave hoowave 4096 Jan 12 13:24 ..\n-rw-r--r-- 1 hoowave hoowave 6148 Jan  9 14:44 .DS_Store\n-rw-r--r-- 1 hoowave hoowave  444 Jan  5 15:21 .gitignore\ndrwxr-xr-x 5 hoowave hoowave 4096 Jan  5 15:24 .gradle\ndrwxr-xr-x 3 hoowave hoowave 4096 Jan 12 13:24 .idea\n-rw-r--r-- 1 hoowave hoowave 1125 Jan  5 15:21 HELP.md\ndrwxr-xr-x 9 hoowave hoowave 4096 Jan 12 13:24 build\n-rw-r--r-- 1 hoowave hoowave  797 Jan  5 16:23 build.gradle\ndrwxr-xr-x 3 hoowave hoowave 4096 Jan  5 15:21 gradle\n-rwxr-xr-x 1 hoowave hoowave 8692 Jan  5 15:21 gradlew\n-rw-r--r-- 1 hoowave hoowave 2868 Jan  5 15:21 gradlew.bat\ndrwxr-xr-x 2 hoowave hoowave 4096 Jan 12 16:12 logs\n-rw-r--r-- 1 hoowave hoowave   33 Jan  5 15:21 settings.gradle\ndrwxr-xr-x 4 hoowave hoowave 4096 Jan  9 14:14 src\n"
  },
  "message": null
}
 

실패 응답

조건 : 명령어가 없는 경우

Code : 200 OK

내용 :

{
  "result": "FAIL",
  "data": null,
  "message": "적절하지 않은 요청입니다.Validation failed for argument [0] in public com.security.securisuite.common.response.CommonResponse com.security.securisuite.system.interfaces.SystemApiController.execute(com.security.securisuite.system.interfaces.dto.SystemDto$SystemRequest): [Field error in object 'systemRequest' on field 'cmd': rejected value []; codes [NotEmpty.systemRequest.cmd,NotEmpty.cmd,NotEmpty.java.lang.String,NotEmpty]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [systemRequest.cmd,cmd]; arguments []; default message [cmd]]; default message [명령어는 필수값입니다.]] "
}
 

2. Pid

Request

URL : /api/v1/system/pid

Method : POST

Auth required : NO

데이터 제약

{
  "processName": "[프로세스이름]"
}
 

데이터 예시

{
  "processName": "crunch"
}
 

Response

Code : 200 OK

성공 응답

{
  "result": "SUCCESS",
  "data": {
    "processName": "crunch",
    "cmd": "/bin/sh -c ps aux | grep crunch | grep -v grep ",
    "regDts": "20240112161615",
    "logName": "20240112161615_pid.txt",
    "log": "hoowave   128933 10.9  0.1  13460  2176 pts/0    Rl+  16:16   0:00 crunch 8 8 0123456789 -o ./logs/20240112161612_crunch.txt\n",
    "pid": "128933"
  },
  "message": null
}
 

실패 응답 1

조건 : 프로세스이름이 입력되지 않은 경우

Code : 200 OK

내용 :

{
  "result": "FAIL",
  "data": null,
  "message": "적절하지 않은 요청입니다.Validation failed for argument [0] in public com.security.securisuite.common.response.CommonResponse com.security.securisuite.system.interfaces.SystemApiController.pid(com.security.securisuite.system.interfaces.dto.ProcessNameRequest): [Field error in object 'processNameRequest' on field 'processName': rejected value []; codes [NotEmpty.processNameRequest.processName,NotEmpty.processName,NotEmpty.java.lang.String,NotEmpty]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [processNameRequest.processName,processName]; arguments []; default message [processName]]; default message [프로세스명은 필수값입니다.]] "
}
 

실패 응답 2

조건 : 프로세스가 실행중이지 않은 경우

Code : 200 OK

내용 :

{
  "result": "FAIL",
  "data": null,
  "message": "해당 프로세스는 존재하지 않습니다."
}
 

3. Terminate

Request

URL : /api/v1/system/terminate

Method : POST

Auth required : NO

데이터 제약

{
  "processName": "[프로세스이름]"
}
 

데이터 예시

{
  "processName": "crunch"
}
 

Response

Code : 200 OK

성공 응답

{
  "result": "SUCCESS",
  "data": {
    "processName": "crunch",
    "pid": "131913",
    "cmd": "kill -9 131913 ",
    "regDts": "20240112162226"
  },
  "message": null
}
 

실패 응답 1

조건 : 프로세스이름이 입력되지 않은 경우

Code : 200 OK

내용 :

{
  "result": "FAIL",
  "data": null,
  "message": "적절하지 않은 요청입니다.Validation failed for argument [0] in public com.security.securisuite.common.response.CommonResponse com.security.securisuite.system.interfaces.SystemApiController.terminate(com.security.securisuite.system.interfaces.dto.ProcessNameRequest): [Field error in object 'processNameRequest' on field 'processName': rejected value []; codes [NotEmpty.processNameRequest.processName,NotEmpty.processName,NotEmpty.java.lang.String,NotEmpty]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [processNameRequest.processName,processName]; arguments []; default message [processName]]; default message [프로세스명은 필수값입니다.]] "
}
 

실패 응답 2

조건 : 프로세스가 실행중이지 않은 경우

Code : 200 OK

내용 :

{
  "result": "FAIL",
  "data": null,
  "message": "해당 프로세스는 존재하지 않습니다."
}
 

Report

/api/v1/report

1. Dashboard

Request

URL : /api/v1/report/dashboard

Method : POST

Auth required : NO

데이터 제약

{
}
 

데이터 예시

{
}
 

Response

Code : 200 OK

성공 응답

{
  "result": "SUCCESS",
  "data": {
    "counts": {
      "crunch": 0,
      "system": 2,
      "john": 0,
      "nmap": 0,
      "httrack": 0
    }
  },
  "message": null
}
 

2. Filelist

Request

URL : /api/v1/report/files

Method : POST

Auth required : NO

데이터 제약

{
}
 

데이터 예시

{
}
 

Response

Code : 200 OK

성공 응답

{
  "result": "SUCCESS",
  "data": {
    "httrackFileInfos": [
      {
        "httrackRegDts": "20240205052516",
        "httrackTransUrl": "20240205052516_http_hoowave_dothome_co_kr",
        "httrackUrl": "http://hoowave.dothome.co.kr",
        "httrackType": "wget"
      }
    ],
    "crunchFileInfos": {
      "1": {
        "crunchMinWord": 4,
        "crunchMaxWord": 4,
        "crunchWords": "0123456789",
        "crunchRegDts": "20240205052522",
        "crunchLogName": "20240205052522_crunch.txt"
      }
    }
  },
  "message": null
}
 

3. Loglist

Request

URL : /api/v1/report/logs

Method : POST

Auth required : NO

데이터 제약

{
}
 

데이터 예시

{
}
 

Response

Code : 200 OK

성공 응답

{
  "result": "SUCCESS",
  "data": {
    "logList": [
      {
        "type": "system",
        "logName": "20240205050749_system.txt",
        "regDts": "20240205050749"
      },
      {
        "type": "system",
        "logName": "20240205050745_system.txt",
        "regDts": "20240205050745"
      }
    ]
  },
  "message": null
}
 

 

 

'Project > SecuriSuite' 카테고리의 다른 글

[SecuriSuite] 시작하기  (0) 2025.03.28
[SecuriSuite] Interface  (0) 2025.03.28
[SecuriSuite] 기술 스택 & 패키지  (0) 2025.03.28
[SecuriSuite] 프로젝트 개요 및 소개  (0) 2025.03.28