├── assets └── img │ ├── Index_img.png │ ├── ScaletBomb.png │ ├── portscan_img.png │ └── directoryscan_img.png ├── .gitignore ├── src └── main │ ├── resources │ └── img │ │ ├── ScarletBomb.png │ │ ├── ffffffff0x_ico.png │ │ └── icon │ │ └── book-2-line.png │ └── java │ ├── View │ ├── UtilsView │ │ ├── AssetScan │ │ │ ├── AssetScanController.java │ │ │ └── AssetScan.fxml │ │ ├── PortScan │ │ │ ├── PortScanIcon.java │ │ │ ├── PortScanBean.java │ │ │ ├── PortScan.fxml │ │ │ ├── PortScanController.java │ │ │ └── PortFast.java │ │ ├── DNSScan │ │ │ ├── DNSScanIcon.java │ │ │ ├── DNSScanController.java │ │ │ └── DNSScan.fxml │ │ └── DirectoryScan │ │ │ ├── DirectoryScanIcon.java │ │ │ ├── DirectoryScanBean.java │ │ │ ├── DirectoryScanImpl.java │ │ │ ├── DirectoryScan.fxml │ │ │ ├── StstusCodeFast.java │ │ │ └── DirectoryScanController.java │ ├── RootView │ │ ├── RootViewNodeList.java │ │ ├── IndexAnchorpane.fxml │ │ ├── RootView.fxml │ │ ├── RootViewNodeSet.java │ │ └── RootViewController.java │ └── ViewTset │ │ ├── Test_01.java │ │ ├── Test04.java │ │ ├── Test_02.java │ │ ├── test.fxml │ │ ├── Test01.java │ │ ├── Test06.java │ │ ├── Test.java │ │ ├── Test02.java │ │ ├── Test03.java │ │ └── Test05.java │ ├── Init │ └── Init.java │ ├── Languages │ ├── Language.properties │ ├── Language_en.properties │ └── Language_zh.properties │ ├── Mock │ └── MockView.java │ └── Main.java ├── .idea ├── vcs.xml ├── .gitignore ├── modules.xml ├── encodings.xml ├── misc.xml ├── libraries │ ├── Maven__junit_junit_4_12.xml │ ├── Maven__com_jfoenix_jfoenix_8_0_8.xml │ ├── Maven__org_hamcrest_hamcrest_core_1_3.xml │ ├── Maven__commons_codec_commons_codec_1_2.xml │ ├── Maven__commons_logging_commons_logging_1_0_4.xml │ └── Maven__commons_httpclient_commons_httpclient_3_1.xml ├── compiler.xml ├── jarRepositories.xml └── uiDesigner.xml ├── Readme.md ├── ScarletBomb.iml └── pom.xml /assets/img/Index_img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RyuZUSUNC/ScarletBomb/HEAD/assets/img/Index_img.png -------------------------------------------------------------------------------- /assets/img/ScaletBomb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RyuZUSUNC/ScarletBomb/HEAD/assets/img/ScaletBomb.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Project exclude paths 2 | /target/ 3 | /assets/img/ScaletBomb-r.png 4 | /assets/img/source2.png 5 | -------------------------------------------------------------------------------- /assets/img/portscan_img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RyuZUSUNC/ScarletBomb/HEAD/assets/img/portscan_img.png -------------------------------------------------------------------------------- /assets/img/directoryscan_img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RyuZUSUNC/ScarletBomb/HEAD/assets/img/directoryscan_img.png -------------------------------------------------------------------------------- /src/main/resources/img/ScarletBomb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RyuZUSUNC/ScarletBomb/HEAD/src/main/resources/img/ScarletBomb.png -------------------------------------------------------------------------------- /src/main/resources/img/ffffffff0x_ico.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RyuZUSUNC/ScarletBomb/HEAD/src/main/resources/img/ffffffff0x_ico.png -------------------------------------------------------------------------------- /src/main/resources/img/icon/book-2-line.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RyuZUSUNC/ScarletBomb/HEAD/src/main/resources/img/icon/book-2-line.png -------------------------------------------------------------------------------- /src/main/java/View/UtilsView/AssetScan/AssetScanController.java: -------------------------------------------------------------------------------- 1 | package View.UtilsView.AssetScan; 2 | 3 | public class AssetScanController { 4 | } 5 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # Datasource local storage ignored files 5 | /dataSources/ 6 | /dataSources.local.xml 7 | # Editor-based HTTP Client requests 8 | /httpRequests/ 9 | -------------------------------------------------------------------------------- /src/main/java/Init/Init.java: -------------------------------------------------------------------------------- 1 | package Init; 2 | 3 | import java.util.ResourceBundle; 4 | 5 | public class Init { 6 | public static ResourceBundle languageResourceBundle = ResourceBundle.getBundle("Languages/Language"); 7 | 8 | } 9 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__junit_junit_4_12.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/main/java/View/RootView/RootViewNodeList.java: -------------------------------------------------------------------------------- 1 | package View.RootView; 2 | 3 | import java.util.ArrayList; 4 | 5 | public class RootViewNodeList { 6 | public ArrayList NodeList = new ArrayList<>(); 7 | 8 | public RootViewNodeList(){ 9 | this.NodeList.add("/View/UtilsView/PortScan/PortScan.fxml"); 10 | this.NodeList.add("/View/UtilsView/DirectoryScan/DirectoryScan.fxml"); 11 | this.NodeList.add("/View/UtilsView/DNSScan/DNSScan.fxml"); 12 | // this.NodeList.add("/View/UtilsView/AssetScan/AssetScan.fxml"); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_jfoenix_jfoenix_8_0_8.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__commons_codec_commons_codec_1_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__commons_logging_commons_logging_1_0_4.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__commons_httpclient_commons_httpclient_3_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /Readme.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

4 | 5 | # ScaletBomb 6 | 7 | **一款用来进行扫描与FUZZ的工具** 8 | 9 | - 使用java 8编写 10 | - UI框架为JAVAFX 11 | - 不定期更新 12 | 13 | ## 已完成的功能 14 | - 端口扫描 15 | - 网页扫描 16 | - 目录扫描 17 | 18 | ## 预定制作的主要功能 19 | 20 | - 端口扫描 21 | - 网页扫描 22 | - 目录扫描 23 | - 子域扫描 24 | - 资产探测(目标探活) 25 | - 爆破模块 26 | - SSH 27 | - Telnet 28 | - VNC 29 | - FTP 30 | - 数据库 31 | - MySQL 32 | - MSSQL 33 | - Oracle 34 | - MongoDB 35 | - Redis 36 | 37 | ## 预定制作的次要功能 38 | - 语言切换 39 | 40 | # 界面预览 41 | ![](assets/img/Index_img.png) 42 | 43 | ![](assets/img/portscan_img.png) 44 | 45 | ![](assets/img/directoryscan_img.png) 46 | 47 | # 免责声明 48 | 49 | 本人编写的工具,仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关. 50 | -------------------------------------------------------------------------------- /src/main/java/View/RootView/IndexAnchorpane.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/main/java/View/ViewTset/Test_01.java: -------------------------------------------------------------------------------- 1 | package View.ViewTset; 2 | 3 | import javafx.application.Application; 4 | import javafx.scene.Group; 5 | import javafx.scene.Scene; 6 | import javafx.scene.layout.AnchorPane; 7 | import javafx.scene.paint.Color; 8 | import javafx.stage.Stage; 9 | 10 | public class Test_01 extends Application { 11 | @Override 12 | public void start(Stage primaryStage) throws Exception { 13 | 14 | AnchorPane pane = new AnchorPane(); 15 | 16 | Group root = new Group(); 17 | Scene scene = new Scene(root, 800, 600, Color.BLACK); 18 | primaryStage.setScene(scene); 19 | 20 | root.getChildren().add(pane); 21 | primaryStage.show(); 22 | } 23 | 24 | @Override 25 | public void init() throws Exception { 26 | 27 | super.init(); 28 | } 29 | 30 | public static void main(String[] args) { 31 | launch(args); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /.idea/jarRepositories.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 14 | 15 | 19 | 20 | -------------------------------------------------------------------------------- /src/main/java/View/ViewTset/Test04.java: -------------------------------------------------------------------------------- 1 | package View.ViewTset; 2 | 3 | import javafx.animation.FadeTransition; 4 | import javafx.application.Application; 5 | import javafx.scene.Group; 6 | import javafx.scene.Scene; 7 | import javafx.scene.shape.Rectangle; 8 | import javafx.stage.Stage; 9 | import javafx.util.Duration; 10 | 11 | public class Test04 extends Application { 12 | 13 | public static void main(String[] args) { 14 | Application.launch(args); 15 | } 16 | 17 | @Override 18 | public void start(Stage primaryStage) { 19 | Group group = new Group(); 20 | 21 | Rectangle rect = new Rectangle(20,20,200,200); 22 | 23 | FadeTransition ft = new FadeTransition(Duration.millis(5000), rect); 24 | ft.setFromValue(1.0); 25 | ft.setToValue(0.0); 26 | ft.play(); 27 | 28 | group.getChildren().add(rect); 29 | 30 | Scene scene = new Scene(group, 300, 200); 31 | primaryStage.setScene(scene); 32 | primaryStage.show(); 33 | } 34 | } -------------------------------------------------------------------------------- /src/main/java/Languages/Language.properties: -------------------------------------------------------------------------------- 1 | Start = Start 2 | Target = Target 3 | Thread_Count = Thread Count 4 | Delay = Delay(ms) 5 | State = State 6 | Dictionary = Dictionary 7 | Dictionary_Path = Dictionary Path 8 | Preview = Preview 9 | Dictionary_Count = Dictionary Count 10 | Run_SetupandInfo = Run Setup&Info 11 | Directory_Save = - Save - 12 | Directory_Help = - Help - 13 | Directory_Copy = - Copy - 14 | Directory_Order = - Order - 15 | FileChooserTitle = Open Directory File 16 | Filter = Filter 17 | # ALL 18 | 19 | Index = Index 20 | PortScan = PortScan 21 | WebScan = WebScan 22 | DNSScan = DNSScan 23 | DirectoryScan = DirectoryScan 24 | AssetsScan = AssetsScan 25 | BlastIntruder = BlastIntruder 26 | Database = Database 27 | 28 | #Tree 29 | Start_Port = Start Port 30 | End_Port = End Port 31 | Infomation = Infomation 32 | Copy_Complete = Copy Complete 33 | Copy_Complete_message = Information is copied to the clipboard 34 | #Port Scan 35 | 36 | Ststus_Code = Ststus Code 37 | #Directory Scan 38 | 39 | Dictionary_Preview = Dictionary Preview 40 | #DNS Scan -------------------------------------------------------------------------------- /src/main/java/Languages/Language_en.properties: -------------------------------------------------------------------------------- 1 | Start = Start 2 | Thread_Count = Thread Count 3 | Delay = Delay(ms) 4 | State = State 5 | Target = Input Target 6 | Dictionary = Dictionary 7 | Dictionary_Path = Dictionary Path 8 | Preview = Preview 9 | Run_SetupandInfo = Run Setup&Info 10 | Dictionary_Count = Dictionary Count 11 | Filter = Filter 12 | Directory_Save = - Save - 13 | Directory_Help = - Help - 14 | Directory_Copy = - Copy - 15 | Directory_Order = - Order - 16 | FileChooserTitle = Open Directory File 17 | #All 18 | 19 | Index = Index 20 | PortScan = PortScan 21 | WebScan = WebScan 22 | DNSScan = DNSScan 23 | DirectoryScan = DirectoryScan 24 | AssetsScan = AssetsScan 25 | BlastIntruder = BlastIntruder 26 | Database = Database 27 | #Tree 28 | 29 | Start_Port = Start Port 30 | End_Port = End Port 31 | Infomation = Infomation 32 | Copy_Complete = Copy Complete 33 | Copy_Complete_message = Information is copied to the clipboard 34 | #Port Scan 35 | 36 | Ststus_Code = Ststus Code 37 | #Directory Scan 38 | 39 | Dictionary_Preview = Dictionary Preview 40 | #DNS Scan -------------------------------------------------------------------------------- /src/main/java/View/ViewTset/Test_02.java: -------------------------------------------------------------------------------- 1 | package View.ViewTset; 2 | 3 | import javafx.concurrent.Task; 4 | 5 | import java.util.concurrent.Executor; 6 | import java.util.concurrent.Executors; 7 | 8 | public class Test_02 { 9 | public static void main(String[] args) { 10 | Executor exec = Executors.newFixedThreadPool(2000, runnable -> { 11 | Thread t = Executors.defaultThreadFactory().newThread(runnable); 12 | t.setDaemon(true); 13 | return t ; 14 | }); 15 | 16 | for (int i = 1; i <= 300; i++) { 17 | int value = i ; 18 | Task task = new Task() { 19 | @Override 20 | public String call() { 21 | // in real life, do real work here... 22 | return "\n" + value ; // value to be processed in onSucceeded 23 | } 24 | }; 25 | // task.setOnSucceeded(e -> ta_Statusbereich.appendText(task.getValue())); 26 | // exec.execute(task); 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/View/UtilsView/PortScan/PortScanIcon.java: -------------------------------------------------------------------------------- 1 | package View.UtilsView.PortScan; 2 | 3 | import com.jfoenix.svg.SVGGlyph; 4 | 5 | public class PortScanIcon { 6 | public SVGGlyph sort_desc = new SVGGlyph("M20 4v12h3l-4 5-4-5h3V4h2zm-8 14v2H3v-2h9zm2-7v2H3v-2h11zm0-7v2H3V4h11z"); 7 | public SVGGlyph book_mark_fill = new SVGGlyph("M20 22H6.5A3.5 3.5 0 0 1 3 18.5V5a3 3 0 0 1 3-3h14a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1zm-1-2v-3H6.5a1.5 1.5 0 0 0 0 3H19zM10 4v8l3.5-2 3.5 2V4h-7z"); 8 | public SVGGlyph clipbord = new SVGGlyph("M6 4v4h12V4h2.007c.548 0 .993.445.993.993v16.014a.994.994 0 0 1-.993.993H3.993A.994.994 0 0 1 3 21.007V4.993C3 4.445 3.445 4 3.993 4H6zm2-2h8v4H8V2z"); 9 | public SVGGlyph clipbord_alert = new SVGGlyph("M6 4v4h12V4h2.007c.548 0 .993.445.993.993v16.014a.994.994 0 0 1-.993.993H3.993A.994.994 0 0 1 3 21.007V4.993C3 4.445 3.445 4 3.993 4H6zm2-2h8v4H8V2z"); 10 | 11 | public PortScanIcon(){ 12 | sort_desc.setSize(16,16); 13 | book_mark_fill.setSize(16,19); 14 | clipbord.setSize(16,19); 15 | clipbord_alert.setSize(30,34); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/View/UtilsView/PortScan/PortScanBean.java: -------------------------------------------------------------------------------- 1 | package View.UtilsView.PortScan; 2 | 3 | public class PortScanBean { 4 | private String target; 5 | private int start_port = 1; 6 | private int end_port = 65535; 7 | private int thread_count = 1000; 8 | private int delay = 200; 9 | private String state = "Wait"; 10 | 11 | public String getTarget() { 12 | return target; 13 | } 14 | 15 | public void setTarget(String target) { 16 | this.target = target; 17 | } 18 | 19 | public int getStart_port() { 20 | return start_port; 21 | } 22 | 23 | public void setStart_port(int start_port) { 24 | this.start_port = start_port; 25 | } 26 | 27 | public int getEnd_port() { 28 | return end_port; 29 | } 30 | 31 | public void setEnd_port(int end_port) { 32 | this.end_port = end_port; 33 | } 34 | 35 | public int getThread_count() { 36 | return thread_count; 37 | } 38 | 39 | public void setThread_count(int thread_count) { 40 | this.thread_count = thread_count; 41 | } 42 | 43 | public int getDelay() { 44 | return delay; 45 | } 46 | 47 | public void setDelay(int delay) { 48 | this.delay = delay; 49 | } 50 | 51 | public String getState() { 52 | return state; 53 | } 54 | 55 | public void setState(String state) { 56 | this.state = state; 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/main/java/View/UtilsView/AssetScan/AssetScan.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /ScarletBomb.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/main/java/View/ViewTset/test.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 |
39 | -------------------------------------------------------------------------------- /src/main/java/View/UtilsView/DNSScan/DNSScanIcon.java: -------------------------------------------------------------------------------- 1 | package View.UtilsView.DNSScan; 2 | 3 | import com.jfoenix.svg.SVGGlyph; 4 | 5 | public class DNSScanIcon { 6 | public SVGGlyph book_mark_fill = new SVGGlyph("M20 22H6.5A3.5 3.5 0 0 1 3 18.5V5a3 3 0 0 1 3-3h14a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1zm-1-2v-3H6.5a1.5 1.5 0 0 0 0 3H19zM10 4v8l3.5-2 3.5 2V4h-7z"); 7 | public SVGGlyph save_fill = new SVGGlyph("M18 21v-8H6v8H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h13l4 4v13a1 1 0 0 1-1 1h-2zm-2 0H8v-6h8v6z"); 8 | public SVGGlyph arrow_go_back = new SVGGlyph("M5.828 7l2.536 2.536L6.95 10.95 2 6l4.95-4.95 1.414 1.414L5.828 5H13a8 8 0 1 1 0 16H4v-2h9a6 6 0 1 0 0-12H5.828z"); 9 | public SVGGlyph arrow_right = new SVGGlyph("M16.172 11l-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"); 10 | public SVGGlyph clipbord = new SVGGlyph("M6 4v4h12V4h2.007c.548 0 .993.445.993.993v16.014a.994.994 0 0 1-.993.993H3.993A.994.994 0 0 1 3 21.007V4.993C3 4.445 3.445 4 3.993 4H6zm2-2h8v4H8V2z"); 11 | public SVGGlyph sort_desc = new SVGGlyph("M20 4v12h3l-4 5-4-5h3V4h2zm-8 14v2H3v-2h9zm2-7v2H3v-2h11zm0-7v2H3V4h11z"); 12 | public SVGGlyph clipbord_alert = new SVGGlyph("M6 4v4h12V4h2.007c.548 0 .993.445.993.993v16.014a.994.994 0 0 1-.993.993H3.993A.994.994 0 0 1 3 21.007V4.993C3 4.445 3.445 4 3.993 4H6zm2-2h8v4H8V2z"); 13 | 14 | public DNSScanIcon(){ 15 | book_mark_fill.setSize(30,35); 16 | save_fill.setSize(30,32); 17 | clipbord.setSize(30,35); 18 | arrow_go_back.setSize(32,28); 19 | arrow_right.setSize(45,28); 20 | sort_desc.setSize(30,30); 21 | clipbord_alert.setSize(30,34); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/View/ViewTset/Test01.java: -------------------------------------------------------------------------------- 1 | package View.ViewTset; 2 | 3 | import javafx.animation.Animation; 4 | import javafx.animation.Transition; 5 | import javafx.application.Application; 6 | import javafx.scene.Group; 7 | import javafx.scene.Scene; 8 | import javafx.scene.layout.VBox; 9 | import javafx.scene.text.Text; 10 | import javafx.stage.Stage; 11 | import javafx.util.Duration; 12 | 13 | public class Test01 extends Application { 14 | public static void main(String[] args) { 15 | launch(args); 16 | } 17 | 18 | @Override 19 | public void start(Stage stage) { 20 | Scene scene = new Scene(new Group()); 21 | stage.setTitle("Sample"); 22 | stage.setWidth(300); 23 | stage.setHeight(190); 24 | 25 | VBox vbox = new VBox(); 26 | vbox.setLayoutX(20); 27 | vbox.setLayoutY(20); 28 | 29 | 30 | final String content = "Lorem ipsum"; 31 | final Text text = new Text(10, 20, ""); 32 | 33 | final Animation animation = new Transition() { 34 | { 35 | setCycleDuration(Duration.millis(1000)); 36 | } 37 | 38 | protected void interpolate(double frac) { 39 | final int length = content.length(); 40 | final int n = Math.round(length * (float) frac); 41 | text.setText(content.substring(0, n)); 42 | } 43 | 44 | }; 45 | 46 | animation.play(); 47 | 48 | vbox.getChildren().add(text); 49 | vbox.setSpacing(10); 50 | ((Group) scene.getRoot()).getChildren().add(vbox); 51 | 52 | stage.setScene(scene); 53 | stage.show(); 54 | } 55 | } -------------------------------------------------------------------------------- /src/main/java/View/UtilsView/DirectoryScan/DirectoryScanIcon.java: -------------------------------------------------------------------------------- 1 | package View.UtilsView.DirectoryScan; 2 | 3 | import com.jfoenix.svg.SVGGlyph; 4 | 5 | public class DirectoryScanIcon { 6 | public SVGGlyph book_mark_fill = new SVGGlyph("M20 22H6.5A3.5 3.5 0 0 1 3 18.5V5a3 3 0 0 1 3-3h14a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1zm-1-2v-3H6.5a1.5 1.5 0 0 0 0 3H19zM10 4v8l3.5-2 3.5 2V4h-7z"); 7 | public SVGGlyph save_fill = new SVGGlyph("M18 21v-8H6v8H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h13l4 4v13a1 1 0 0 1-1 1h-2zm-2 0H8v-6h8v6z"); 8 | public SVGGlyph arrow_go_back = new SVGGlyph("M5.828 7l2.536 2.536L6.95 10.95 2 6l4.95-4.95 1.414 1.414L5.828 5H13a8 8 0 1 1 0 16H4v-2h9a6 6 0 1 0 0-12H5.828z"); 9 | public SVGGlyph arrow_right = new SVGGlyph("M16.172 11l-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"); 10 | public SVGGlyph clipbord = new SVGGlyph("M6 4v4h12V4h2.007c.548 0 .993.445.993.993v16.014a.994.994 0 0 1-.993.993H3.993A.994.994 0 0 1 3 21.007V4.993C3 4.445 3.445 4 3.993 4H6zm2-2h8v4H8V2z"); 11 | public SVGGlyph sort_desc = new SVGGlyph("M20 4v12h3l-4 5-4-5h3V4h2zm-8 14v2H3v-2h9zm2-7v2H3v-2h11zm0-7v2H3V4h11z"); 12 | public SVGGlyph clipbord_alert = new SVGGlyph("M6 4v4h12V4h2.007c.548 0 .993.445.993.993v16.014a.994.994 0 0 1-.993.993H3.993A.994.994 0 0 1 3 21.007V4.993C3 4.445 3.445 4 3.993 4H6zm2-2h8v4H8V2z"); 13 | 14 | 15 | public DirectoryScanIcon(){ 16 | book_mark_fill.setSize(30,35); 17 | save_fill.setSize(30,32); 18 | clipbord.setSize(30,35); 19 | arrow_go_back.setSize(32,28); 20 | arrow_right.setSize(45,28); 21 | sort_desc.setSize(30,30); 22 | clipbord_alert.setSize(30,34); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/View/RootView/RootView.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /src/main/java/Languages/Language_zh.properties: -------------------------------------------------------------------------------- 1 | Start = \u5F00\u59CB 2 | Target = \u8BF7\u8F93\u5165\u626B\u63CF\u76EE\u6807 3 | Thread_Count = \u7EBF\u7A0B\u6570 4 | Delay = \u5EF6\u8FDF(\u6BEB\u79D2) 5 | State = \u72B6\u6001 6 | Dictionary = \u9009\u62E9\u5B57\u5178 7 | Dictionary_Path = \u5B57\u5178\u8DEF\u5F84 8 | Preview = \u5F85\u626B\u63CFURL\u9884\u89C8 9 | Run_SetupandInfo = \u8FD0\u884C\u8BBE\u7F6E&\u4FE1\u606F 10 | Dictionary_Count = \u5B57\u5178\u603B\u6761\u76EE 11 | Filter = \u7B5B\u9009\u5668 12 | Directory_Save = - \u4FDD\u5B58 - 13 | Directory_Help = - \u5E2E\u52A9 - 14 | Directory_Copy = - \u590D\u5236 - 15 | Directory_Order = - \u6392\u5E8F - 16 | FileChooserTitle = \u6253\u5F00\u5B57\u5178\u6587\u4EF6 17 | #All 18 | 19 | Index = \u4E3B\u5206\u652F 20 | \u4E3B\u5206\u652F = Index 21 | PortScan = \u7AEF\u53E3\u626B\u63CF 22 | \u7AEF\u53E3\u626B\u63CF = PortScan 23 | WebScan = \u7F51\u9875\u626B\u63CF 24 | \u7F51\u9875\u626B\u63CF = WebScan 25 | DNSScan = \u5B50\u57DF\u626B\u63CF 26 | \u5B50\u57DF\u626B\u63CF = DNSScan 27 | DirectoryScan = \u76EE\u5F55\u626B\u63CF 28 | \u76EE\u5F55\u626B\u63CF = DirectoryScan 29 | AssetsScan = \u8D44\u4EA7\u63A2\u6D4B 30 | \u8D44\u4EA7\u63A2\u6D4B = AssetsScan 31 | BlastIntruder = \u7206\u7834\u6A21\u5757 32 | \u7206\u7834\u6A21\u5757 = BlastIntruder 33 | Database = \u6570\u636E\u5E93 34 | \u6570\u636E\u5E93 = Database 35 | #Tree 36 | 37 | Start_Port = \u5F00\u59CB\u7AEF\u53E3 38 | End_Port = \u7ED3\u675F\u7AEF\u53E3 39 | Infomation = \u4FE1\u606F 40 | Copy_Complete = \u590D\u5236\u5B8C\u6210 41 | Copy_Complete_message = \u4FE1\u606F\u5DF2\u590D\u5236\u81F3\u526A\u5207\u677F 42 | #Port Scan Pane 43 | 44 | Ststus_Code = \u5339\u914D\u7684\u72B6\u6001\u7801 45 | #Directory Scan 46 | 47 | Dictionary_Preview = \u5B57\u5178\u9884\u89C8 48 | #DNS Scan -------------------------------------------------------------------------------- /src/main/java/Mock/MockView.java: -------------------------------------------------------------------------------- 1 | package Mock; 2 | 3 | import Init.Init; 4 | import javafx.application.Application; 5 | import javafx.fxml.FXMLLoader; 6 | import javafx.scene.Scene; 7 | import javafx.scene.image.Image; 8 | import javafx.scene.layout.AnchorPane; 9 | import javafx.stage.Stage; 10 | 11 | import java.io.IOException; 12 | 13 | public class MockView extends Application { 14 | private Stage primaryStage; 15 | private AnchorPane rootLayout; 16 | 17 | @Override 18 | public void start(Stage primaryStage) { 19 | this.primaryStage = primaryStage; 20 | primaryStage.setTitle("ScarletBomb"); 21 | initRootLayout("../View/UtilsView/DirectoryScan/DirectoryScan.fxml"); 22 | } 23 | 24 | public void initRootLayout(String FXMLPath) { 25 | try { 26 | // Locale local = Locale.getDefault(); 27 | // System.out.println(local.getCountry()); 28 | // System.out.println(local.getLanguage()); 29 | // Locale.setDefault(new Locale("en","US"));//英文版本测试 30 | 31 | // Load root layout from fxml file. 32 | FXMLLoader loader = new FXMLLoader(); 33 | loader.setLocation(MockView.class.getResource(FXMLPath)); 34 | loader.setResources(Init.languageResourceBundle); 35 | rootLayout = loader.load(); 36 | 37 | primaryStage.getIcons().add(new Image(MockView.class.getResourceAsStream("../img/ffffffff0x_ico.png"))); 38 | primaryStage.setOnCloseRequest(event -> System.exit(0)); 39 | 40 | // Show the scene containing the root layout. 41 | Scene scene = new Scene(rootLayout); 42 | primaryStage.setScene(scene); 43 | primaryStage.setResizable(false); 44 | primaryStage.show(); 45 | } catch (IOException e) { 46 | e.printStackTrace(); 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/main/java/Main.java: -------------------------------------------------------------------------------- 1 | import Init.Init; 2 | import javafx.application.Application; 3 | import javafx.event.EventHandler; 4 | import javafx.fxml.FXMLLoader; 5 | import javafx.scene.Scene; 6 | import javafx.scene.image.Image; 7 | import javafx.scene.layout.BorderPane; 8 | import javafx.stage.Stage; 9 | import javafx.stage.WindowEvent; 10 | 11 | import java.io.IOException; 12 | import java.util.Locale; 13 | 14 | public class Main extends Application { 15 | private Stage primaryStage; 16 | private BorderPane rootLayout; 17 | 18 | @Override 19 | public void start(Stage primaryStage) { 20 | this.primaryStage = primaryStage; 21 | primaryStage.setTitle("ScarletBomb"); 22 | initRootLayout(); 23 | } 24 | 25 | public void initRootLayout() { 26 | try { 27 | // Locale local = Locale.getDefault(); 28 | // System.out.println(local.getCountry()); 29 | // System.out.println(local.getLanguage()); 30 | // Locale.setDefault(new Locale("en","US"));//英文版本测试 31 | 32 | // Load root layout from fxml file. 33 | FXMLLoader loader = new FXMLLoader(); 34 | loader.setLocation(Main.class.getResource("View/RootView/RootView.fxml")); 35 | loader.setResources(Init.languageResourceBundle); 36 | rootLayout = loader.load(); 37 | 38 | primaryStage.getIcons().add(new Image(Main.class.getResourceAsStream("/img/ffffffff0x_ico.png"))); 39 | primaryStage.setOnCloseRequest(event -> System.exit(0)); 40 | 41 | // Show the scene containing the root layout. 42 | Scene scene = new Scene(rootLayout); 43 | primaryStage.setScene(scene); 44 | primaryStage.setResizable(false); 45 | primaryStage.show(); 46 | } catch (IOException e) { 47 | e.printStackTrace(); 48 | } 49 | } 50 | 51 | public static void main(String[] args) { 52 | launch(args); 53 | } 54 | } -------------------------------------------------------------------------------- /src/main/java/View/ViewTset/Test06.java: -------------------------------------------------------------------------------- 1 | package View.ViewTset; 2 | 3 | import javafx.animation.PathTransition; 4 | import javafx.animation.Timeline; 5 | import javafx.application.Application; 6 | import javafx.scene.Group; 7 | import javafx.scene.Scene; 8 | import javafx.scene.paint.Color; 9 | import javafx.scene.shape.Circle; 10 | import javafx.scene.shape.CubicCurveTo; 11 | import javafx.scene.shape.MoveTo; 12 | import javafx.scene.shape.Path; 13 | import javafx.stage.Stage; 14 | import javafx.util.Duration; 15 | 16 | public class Test06 extends Application { 17 | 18 | @Override 19 | public void start(final Stage stage){ 20 | final Group group = new Group(); 21 | final Scene scene = new Scene(group, 600, 400, Color.GHOSTWHITE); 22 | stage.setScene(scene); 23 | stage.setTitle("JavaFX 2 Animations"); 24 | stage.show(); 25 | final Circle circle = new Circle(20, 20, 15); 26 | circle.setFill(Color.DARKRED); 27 | 28 | final Path path = new Path(); 29 | path.getElements().add(new MoveTo(20, 20)); 30 | path.getElements().add(new CubicCurveTo(30, 10, 380, 120, 200, 120)); 31 | path.getElements().add(new CubicCurveTo(200, 1120, 110, 240, 380, 240)); 32 | path.setOpacity(0.5); 33 | 34 | group.getChildren().add(path); 35 | group.getChildren().add(circle); 36 | final PathTransition pathTransition = new PathTransition(); 37 | 38 | pathTransition.setDuration(Duration.seconds(8.0)); 39 | pathTransition.setDelay(Duration.seconds(.5)); 40 | pathTransition.setPath(path); 41 | pathTransition.setNode(circle); 42 | pathTransition 43 | .setOrientation(PathTransition.OrientationType.ORTHOGONAL_TO_TANGENT); 44 | pathTransition.setCycleCount(Timeline.INDEFINITE); 45 | pathTransition.setAutoReverse(true); 46 | pathTransition.play(); 47 | } 48 | 49 | public static void main(final String[] arguments) { 50 | Application.launch(arguments); 51 | } 52 | } -------------------------------------------------------------------------------- /src/main/java/View/UtilsView/DirectoryScan/DirectoryScanBean.java: -------------------------------------------------------------------------------- 1 | package View.UtilsView.DirectoryScan; 2 | 3 | import javafx.collections.ObservableList; 4 | 5 | import java.io.File; 6 | import java.util.ArrayList; 7 | 8 | public class DirectoryScanBean { 9 | private String targetURL;//目标URL 10 | private ArrayList directoryText;//字典内容 11 | private File directoryFile;//字典文件 12 | private int directoryLineCountNum;//字典行数 13 | private int threadCount;//线程数 14 | private int delay;//延迟 15 | 16 | private ObservableList CheckStstusCode;//选中的待匹配的状态码 17 | 18 | public ObservableList getCheckStstusCode() { 19 | return CheckStstusCode; 20 | } 21 | 22 | public void setCheckStstusCode(ObservableList checkStstusCode) { 23 | CheckStstusCode = checkStstusCode; 24 | } 25 | 26 | public String getTargetURL() { 27 | return targetURL; 28 | } 29 | 30 | public void setTargetURL(String targetURL) { 31 | this.targetURL = targetURL; 32 | } 33 | 34 | public ArrayList getDirectoryText() { 35 | return directoryText; 36 | } 37 | 38 | public void setDirectoryText(ArrayList directoryText) { 39 | this.directoryText = directoryText; 40 | } 41 | 42 | public File getDirectoryFile() { 43 | return directoryFile; 44 | } 45 | 46 | public void setDirectoryFile(File directoryFile) { 47 | this.directoryFile = directoryFile; 48 | } 49 | 50 | public int getDirectoryLineCountNum() { 51 | return directoryLineCountNum; 52 | } 53 | 54 | public void setDirectoryLineCountNum(int directoryLineCountNum) { 55 | this.directoryLineCountNum = directoryLineCountNum; 56 | } 57 | 58 | public int getThreadCount() { 59 | return threadCount; 60 | } 61 | 62 | public void setThreadCount(int threadNum) { 63 | this.threadCount = threadNum; 64 | } 65 | 66 | public int getDelay() { 67 | return delay; 68 | } 69 | 70 | public void setDelay(int delay) { 71 | this.delay = delay; 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /src/main/java/View/UtilsView/DirectoryScan/DirectoryScanImpl.java: -------------------------------------------------------------------------------- 1 | package View.UtilsView.DirectoryScan; 2 | 3 | import javafx.scene.input.TouchPoint; 4 | import javafx.stage.FileChooser; 5 | import javafx.stage.Stage; 6 | import org.apache.commons.httpclient.HttpClient; 7 | import org.apache.commons.httpclient.methods.GetMethod; 8 | 9 | import javax.swing.filechooser.FileSystemView; 10 | import java.io.*; 11 | import java.util.ArrayList; 12 | import java.util.Scanner; 13 | 14 | public class DirectoryScanImpl { 15 | public File DirectoryGet(String Title){ 16 | Stage primaryStage = null; 17 | FileChooser fileChooser = new FileChooser(); 18 | fileChooser.setTitle(Title); 19 | FileSystemView fsv = FileSystemView.getFileSystemView(); 20 | fileChooser.setInitialDirectory(fsv.getHomeDirectory()); 21 | fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("txt","*.txt")); 22 | return fileChooser.showOpenDialog(primaryStage); 23 | }//字典获取 24 | 25 | public int DirectoryLineGet(File file){ 26 | int count = 0; 27 | Scanner scanner = null; 28 | try { 29 | scanner = new Scanner(file); 30 | } catch (FileNotFoundException e) { 31 | e.printStackTrace(); 32 | } 33 | while(scanner.hasNextLine()){ 34 | scanner.nextLine(); 35 | count++; 36 | } 37 | return count; 38 | }//字典行数获取 39 | 40 | public ArrayList DirectoryTextGet(File file) throws IOException { 41 | ArrayList out = new ArrayList<>(); 42 | String line; 43 | FileInputStream fis = new FileInputStream(file);//Input流 44 | InputStreamReader isr = new InputStreamReader(fis);//读取流 45 | BufferedReader br = new BufferedReader(isr);//缓冲区 46 | while ((line=br.readLine())!=null) { 47 | out.add(line); 48 | } 49 | br.close(); 50 | isr.close(); 51 | fis.close(); 52 | return out; 53 | }//字典内容获取 54 | 55 | public String ResponseNumGet(String url, int timeOut){ 56 | HttpClient client = new HttpClient(); 57 | GetMethod getMethod = new GetMethod(url); 58 | getMethod.setFollowRedirects(false);//取消跟随300段跳转 59 | client.setTimeout(timeOut); 60 | client.setConnectionTimeout(timeOut+2000); 61 | //client.getHttpConnectionManager().getParams().setConnectionTimeout(5000); 62 | int code = 0; 63 | try { 64 | code = client.executeMethod(getMethod); 65 | } catch (IOException e) { 66 | e.printStackTrace(); 67 | } 68 | String Result = Integer.toString(code); 69 | return Result; 70 | }//返回值获取 71 | 72 | } 73 | -------------------------------------------------------------------------------- /src/main/java/View/RootView/RootViewNodeSet.java: -------------------------------------------------------------------------------- 1 | package View.RootView; 2 | 3 | import Init.Init; 4 | import javafx.scene.control.TreeItem; 5 | 6 | public class RootViewNodeSet { 7 | public static TreeItem NodeSet(){ 8 | TreeItem rootItem = new TreeItem<>(Init.languageResourceBundle.getString("Index")); 9 | 10 | TreeItem PortScan = new TreeItem<>(Init.languageResourceBundle.getString("PortScan")); 11 | TreeItem WebScan = new TreeItem<>(Init.languageResourceBundle.getString("WebScan")); 12 | TreeItem DirectoryScan = new TreeItem<>(Init.languageResourceBundle.getString("DirectoryScan")); 13 | TreeItem DNSScan = new TreeItem<>(Init.languageResourceBundle.getString("DNSScan")); 14 | TreeItem AssetsScan = new TreeItem<>(Init.languageResourceBundle.getString("AssetsScan")); 15 | TreeItem BlastIntruder = new TreeItem<>(Init.languageResourceBundle.getString("BlastIntruder")); 16 | TreeItem SSH = new TreeItem<>("SSH"); 17 | TreeItem Telnet = new TreeItem<>("Telnet"); 18 | TreeItem VNC = new TreeItem<>("VNC"); 19 | TreeItem FTP = new TreeItem<>("FTP"); 20 | TreeItem Database = new TreeItem<>(Init.languageResourceBundle.getString("Database")); 21 | TreeItem MySQL = new TreeItem<>("MySQL"); 22 | TreeItem MSSQL = new TreeItem<>("MSSQL"); 23 | TreeItem Oracle = new TreeItem<>("Oracle"); 24 | TreeItem MongoDB = new TreeItem<>("MongoDB"); 25 | TreeItem Redis = new TreeItem<>("Redis"); 26 | 27 | rootItem.setExpanded(true); 28 | rootItem.getChildren().add(PortScan); 29 | rootItem.getChildren().add(WebScan); 30 | WebScan.setExpanded(true); 31 | WebScan.getChildren().add(DirectoryScan); 32 | WebScan.getChildren().add(DNSScan); 33 | WebScan.getChildren().add(AssetsScan); 34 | rootItem.getChildren().add(BlastIntruder); 35 | BlastIntruder.setExpanded(true); 36 | BlastIntruder.getChildren().add(SSH); 37 | BlastIntruder.getChildren().add(Telnet); 38 | BlastIntruder.getChildren().add(VNC); 39 | BlastIntruder.getChildren().add(FTP); 40 | BlastIntruder.getChildren().add(Database); 41 | Database.setExpanded(true); 42 | Database.getChildren().add(MySQL); 43 | Database.getChildren().add(MSSQL); 44 | Database.getChildren().add(Oracle); 45 | Database.getChildren().add(MongoDB); 46 | Database.getChildren().add(Redis); 47 | 48 | return rootItem; 49 | } 50 | } -------------------------------------------------------------------------------- /src/main/java/View/UtilsView/DNSScan/DNSScanController.java: -------------------------------------------------------------------------------- 1 | package View.UtilsView.DNSScan; 2 | 3 | import com.jfoenix.controls.*; 4 | import javafx.animation.KeyFrame; 5 | import javafx.animation.KeyValue; 6 | import javafx.animation.Timeline; 7 | import javafx.fxml.FXML; 8 | import javafx.scene.layout.AnchorPane; 9 | import javafx.util.Duration; 10 | 11 | public class DNSScanController { 12 | DNSScanIcon dnsScanIcon = new DNSScanIcon(); 13 | 14 | @FXML AnchorPane settingPane; 15 | @FXML AnchorPane resultPane; 16 | @FXML JFXComboBox CB_Protocol; 17 | 18 | @FXML JFXTextField field_target; 19 | @FXML JFXTextField field_dicPath; 20 | @FXML JFXTextField field_preview; 21 | 22 | @FXML JFXTextField field_threadCount; 23 | @FXML JFXTextField field_delay; 24 | @FXML JFXTextField field_dicCount; 25 | @FXML JFXTextField field_state; 26 | 27 | @FXML 28 | JFXButton BT_start; 29 | @FXML JFXButton BT_selectDic; 30 | @FXML JFXButton BT_next; 31 | @FXML JFXButton BT_back; 32 | 33 | @FXML JFXComboBox CB_filter; 34 | 35 | @FXML JFXButton LBT_save; 36 | @FXML JFXButton LBT_02; 37 | @FXML JFXButton LBT_copy; 38 | @FXML JFXButton LBT_order; 39 | @FXML JFXButton LBT_05; 40 | 41 | @FXML JFXListView view_dicPreview; 42 | @FXML JFXListView view_result; 43 | 44 | @FXML JFXProgressBar progressBar; 45 | @FXML JFXSpinner spinner; 46 | 47 | @FXML private void initialize(){ 48 | LBT_save.setGraphic(dnsScanIcon.save_fill); 49 | BT_back.setGraphic(dnsScanIcon.arrow_go_back); 50 | BT_next.setGraphic(dnsScanIcon.arrow_right); 51 | LBT_copy.setGraphic(dnsScanIcon.clipbord); 52 | LBT_order.setGraphic(dnsScanIcon.sort_desc); 53 | 54 | } 55 | // Button 56 | @FXML private void OnBT_start(){ 57 | paneCheckAnime(resultPane,settingPane); 58 | } 59 | 60 | @FXML private void OnBT_back(){ 61 | paneCheckAnime(settingPane,resultPane); 62 | } 63 | 64 | @FXML private void OnBT_next(){ 65 | paneCheckAnime(resultPane,settingPane); 66 | } 67 | 68 | // Anime 69 | private void paneCheckAnime(AnchorPane set,AnchorPane noset){ 70 | Timeline timeLine = new Timeline(); 71 | 72 | KeyValue kv_S_Start = new KeyValue(noset.translateXProperty(), 0); 73 | KeyFrame kf_S_Start = new KeyFrame(Duration.seconds(0), "Start", event -> noset.setVisible(false),kv_S_Start); 74 | 75 | KeyValue kv_S_Stop = new KeyValue(noset.translateXProperty(), -680); 76 | KeyFrame kf_S_Stop = new KeyFrame(Duration.seconds(0.3), "Stop", event -> { },kv_S_Stop); 77 | 78 | KeyValue kv_N_Start = new KeyValue(set.translateXProperty(), 680); 79 | KeyFrame kf_N_Start = new KeyFrame(Duration.seconds(0), "Start", event -> set.setVisible(true),kv_N_Start); 80 | 81 | KeyValue kv_N_Stop = new KeyValue(set.translateXProperty(), 0); 82 | KeyFrame kf_N_Stop = new KeyFrame(Duration.seconds(0.3), "Stop", event -> { },kv_N_Stop); 83 | 84 | timeLine.getKeyFrames().addAll(kf_S_Start,kf_S_Stop,kf_N_Start,kf_N_Stop); 85 | timeLine.play(); 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /src/main/java/View/ViewTset/Test.java: -------------------------------------------------------------------------------- 1 | package View.ViewTset; 2 | 3 | import javafx.animation.KeyFrame; 4 | import javafx.animation.KeyValue; 5 | import javafx.animation.Timeline; 6 | import javafx.application.Application; 7 | import javafx.scene.Group; 8 | import javafx.scene.Node; 9 | import javafx.scene.Scene; 10 | import javafx.scene.paint.Color; 11 | import javafx.scene.paint.CycleMethod; 12 | import javafx.scene.paint.LinearGradient; 13 | import javafx.scene.paint.Stop; 14 | import javafx.scene.shape.Circle; 15 | import javafx.scene.shape.Rectangle; 16 | import javafx.scene.shape.StrokeType; 17 | import javafx.stage.Stage; 18 | import javafx.util.Duration; 19 | 20 | import static java.lang.Math.random; 21 | 22 | public class Test extends Application { 23 | 24 | @Override 25 | public void start(Stage primaryStage) { 26 | Group root = new Group(); 27 | Scene scene = new Scene(root, 800, 600, Color.BLACK); 28 | primaryStage.setScene(scene); 29 | 30 | Group circles = new Group(); 31 | for (int i = 0; i < 30; i++) { 32 | Circle circle = new Circle(150, Color.web("white", 0.05)); 33 | circle.setStrokeType(StrokeType.OUTSIDE); 34 | circle.setStroke(Color.web("white", 0.16)); 35 | circle.setStrokeWidth(4); 36 | circles.getChildren().add(circle); 37 | } 38 | Rectangle colors = new Rectangle(scene.getWidth(), scene.getHeight(), 39 | new LinearGradient(0f, 1f, 1f, 0f, true, 40 | CycleMethod.NO_CYCLE, 41 | new Stop(0, Color.web("#f8bd55")), 42 | new Stop(0.14, Color.web("#c0fe56")), 43 | new Stop(0.28, Color.web("#5dfbc1")), 44 | new Stop(0.43, Color.web("#64c2f8")), 45 | new Stop(0.57, Color.web("#be4af7")), 46 | new Stop(0.71, Color.web("#ed5fc2")), 47 | new Stop(0.85, Color.web("#ef504c")), 48 | new Stop(1, Color.web("#f2660f")))); 49 | colors.widthProperty().bind(scene.widthProperty()); 50 | colors.heightProperty().bind(scene.heightProperty()); 51 | 52 | root.getChildren().add(colors); 53 | root.getChildren().add(circles); 54 | 55 | 56 | Timeline timeline = new Timeline(); 57 | for (Node circle: circles.getChildren()) { 58 | timeline.getKeyFrames().addAll( 59 | new KeyFrame(Duration.ZERO, // set start position at 0 60 | new KeyValue(circle.translateXProperty(), random() * 800), 61 | new KeyValue(circle.translateYProperty(), random() * 600) 62 | ), 63 | new KeyFrame(new Duration(40000), // set end position at 40s 64 | new KeyValue(circle.translateXProperty(), random() * 800), 65 | new KeyValue(circle.translateYProperty(), random() * 600) 66 | ) 67 | ); 68 | } 69 | // play 40s of animation 70 | timeline.play(); 71 | 72 | primaryStage.show(); 73 | } 74 | 75 | public static void main(String[] args) { 76 | launch(args); 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /src/main/java/View/ViewTset/Test02.java: -------------------------------------------------------------------------------- 1 | package View.ViewTset; 2 | 3 | 4 | import javafx.animation.KeyFrame; 5 | import javafx.animation.KeyValue; 6 | import javafx.animation.Timeline; 7 | import javafx.application.Application; 8 | import javafx.scene.Group; 9 | import javafx.scene.Node; 10 | import javafx.scene.Scene; 11 | import javafx.scene.effect.BlendMode; 12 | import javafx.scene.effect.BoxBlur; 13 | import javafx.scene.paint.Color; 14 | import javafx.scene.paint.CycleMethod; 15 | import javafx.scene.paint.LinearGradient; 16 | import javafx.scene.paint.Stop; 17 | import javafx.scene.shape.Circle; 18 | import javafx.scene.shape.Rectangle; 19 | import javafx.scene.shape.StrokeType; 20 | import javafx.stage.Stage; 21 | import javafx.util.Duration; 22 | 23 | import static java.lang.Math.random; 24 | 25 | public class Test02 extends Application { 26 | 27 | public static void main(String[] args) { 28 | launch(args); 29 | } 30 | 31 | @Override 32 | public void start(Stage primaryStage) { 33 | Group root = new Group(); 34 | Scene scene = new Scene(root, 800, 600, Color.BLACK); 35 | primaryStage.setScene(scene); 36 | Group circles = new Group(); 37 | for (int i = 0; i < 30; i++) { 38 | Circle circle = new Circle(150, Color.web("white", 0.05)); 39 | circle.setStrokeType(StrokeType.OUTSIDE); 40 | circle.setStroke(Color.web("white", 0.16)); 41 | circle.setStrokeWidth(4); 42 | circles.getChildren().add(circle); 43 | } 44 | Rectangle colors = new Rectangle(scene.getWidth(), scene.getHeight(), 45 | new LinearGradient(0f, 1f, 1f, 0f, true, CycleMethod.NO_CYCLE, new Stop[]{ 46 | new Stop(0, Color.web("#f8bd55")), 47 | new Stop(0.14, Color.web("#c0fe56")), 48 | new Stop(0.28, Color.web("#5dfbc1")), 49 | new Stop(0.43, Color.web("#64c2f8")), 50 | new Stop(0.57, Color.web("#be4af7")), 51 | new Stop(0.71, Color.web("#ed5fc2")), 52 | new Stop(0.85, Color.web("#ef504c")), 53 | new Stop(1, Color.web("#f2660f")),})); 54 | Group blendModeGroup = 55 | new Group(new Group(new Rectangle(scene.getWidth(), scene.getHeight(), 56 | Color.BLACK), circles), colors); 57 | colors.setBlendMode(BlendMode.OVERLAY); 58 | root.getChildren().add(blendModeGroup); 59 | circles.setEffect(new BoxBlur(10, 10, 3)); 60 | Timeline timeline = new Timeline(); 61 | for (Node circle : circles.getChildren()) { 62 | timeline.getKeyFrames().addAll( 63 | new KeyFrame(Duration.ZERO, // set start position at 0 64 | new KeyValue(circle.translateXProperty(), random() * 800), 65 | new KeyValue(circle.translateYProperty(), random() * 600)), 66 | new KeyFrame(new Duration(40000), // set end position at 40s 67 | new KeyValue(circle.translateXProperty(), random() * 800), 68 | new KeyValue(circle.translateYProperty(), random() * 600))); 69 | } 70 | // play 40s of animation 71 | timeline.play(); 72 | 73 | primaryStage.show(); 74 | } 75 | } -------------------------------------------------------------------------------- /src/main/java/View/ViewTset/Test03.java: -------------------------------------------------------------------------------- 1 | package View.ViewTset; 2 | 3 | import javafx.animation.AnimationTimer; 4 | import javafx.animation.KeyFrame; 5 | import javafx.animation.KeyValue; 6 | import javafx.animation.Timeline; 7 | import javafx.application.Application; 8 | import javafx.event.ActionEvent; 9 | import javafx.event.EventHandler; 10 | import javafx.scene.Group; 11 | import javafx.scene.Scene; 12 | import javafx.scene.effect.Lighting; 13 | import javafx.scene.layout.StackPane; 14 | import javafx.scene.paint.Color; 15 | import javafx.scene.shape.Circle; 16 | import javafx.scene.text.Text; 17 | import javafx.stage.Stage; 18 | import javafx.util.Duration; 19 | 20 | public class Test03 extends Application { 21 | 22 | //main timeline 23 | private Timeline timeline; 24 | private AnimationTimer timer; 25 | 26 | //variable for storing actual frame 27 | private Integer i=0; 28 | 29 | @Override public void start(Stage stage) { 30 | Group p = new Group(); 31 | Scene scene = new Scene(p); 32 | stage.setScene(scene); 33 | stage.setWidth(500); 34 | stage.setHeight(500); 35 | p.setTranslateX(80); 36 | p.setTranslateY(80); 37 | 38 | //create a circle with effect 39 | final Circle circle = new Circle(20, Color.rgb(156,216,255)); 40 | circle.setEffect(new Lighting()); 41 | //create a text inside a circle 42 | final Text text = new Text (i.toString()); 43 | text.setStroke(Color.BLACK); 44 | //create a layout for circle with text inside 45 | final StackPane stack = new StackPane(); 46 | stack.getChildren().addAll(circle, text); 47 | stack.setLayoutX(30); 48 | stack.setLayoutY(30); 49 | 50 | p.getChildren().add(stack); 51 | stage.show(); 52 | 53 | //create a timeline for moving the circle 54 | timeline = new Timeline(); 55 | timeline.setCycleCount(Timeline.INDEFINITE); 56 | timeline.setAutoReverse(true); 57 | 58 | //You can add a specific action when each frame is started. 59 | timer = new AnimationTimer() { 60 | @Override 61 | public void handle(long l) { 62 | text.setText(i.toString()); 63 | i++; 64 | } 65 | }; 66 | 67 | //create a keyValue with factory: scaling the circle 2times 68 | KeyValue keyValueX = new KeyValue(stack.scaleXProperty(), 2); 69 | KeyValue keyValueY = new KeyValue(stack.scaleYProperty(), 2); 70 | 71 | //create a keyFrame, the keyValue is reached at time 2s 72 | Duration duration = Duration.millis(2000); 73 | //one can add a specific action when the keyframe is reached 74 | EventHandler onFinished = new EventHandler() { 75 | public void handle(ActionEvent t) { 76 | stack.setTranslateX(Math.random()*200-100); 77 | //reset counter 78 | i = 0; 79 | } 80 | }; 81 | 82 | KeyFrame keyFrame = new KeyFrame(duration, onFinished , keyValueX, keyValueY); 83 | 84 | //add the keyframe to the timeline 85 | timeline.getKeyFrames().add(keyFrame); 86 | 87 | timeline.play(); 88 | timer.start(); 89 | } 90 | 91 | 92 | public static void main(String[] args) { 93 | Application.launch(args); 94 | } 95 | } -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | ffffffff0x.java 8 | ScaletBomb 9 | 1.2.7 10 | 11 | -Dfile.encoding=UTF-8 12 | UTF-8 13 | 14 | 15 | 16 | 17 | 18 | src/main/java 19 | 20 | **/*.properties 21 | **/*.fxml 22 | **/*.css 23 | 24 | 25 | 26 | false 27 | 28 | 29 | src/main/resources 30 | 31 | **/*.* 32 | 33 | false 34 | 35 | 36 | 37 | 38 | org.apache.maven.plugins 39 | maven-compiler-plugin 40 | 3.8.1 41 | 42 | 8 43 | 8 44 | 45 | 46 | 47 | org.apache.maven.plugins 48 | maven-shade-plugin 49 | 1.2.1 50 | 51 | 52 | package 53 | 54 | shade 55 | 56 | 57 | 58 | 59 | Main 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | com.jfoenix 71 | jfoenix 72 | 8.0.8 73 | 74 | 75 | commons-httpclient 76 | commons-httpclient 77 | 3.1 78 | 79 | 80 | junit 81 | junit 82 | 4.12 83 | test 84 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /src/main/java/View/RootView/RootViewController.java: -------------------------------------------------------------------------------- 1 | package View.RootView; 2 | 3 | import Init.Init; 4 | import com.sun.scenario.effect.impl.prism.PrImage; 5 | import javafx.animation.KeyFrame; 6 | import javafx.animation.KeyValue; 7 | import javafx.animation.Timeline; 8 | import javafx.fxml.FXML; 9 | import javafx.fxml.FXMLLoader; 10 | import javafx.scene.Node; 11 | import javafx.scene.control.TreeView; 12 | import javafx.scene.image.Image; 13 | import javafx.scene.layout.AnchorPane; 14 | import javafx.scene.layout.BorderPane; 15 | import javafx.util.Duration; 16 | 17 | import javax.swing.text.Element; 18 | import javax.swing.text.html.ImageView; 19 | import java.io.IOException; 20 | import java.util.Locale; 21 | 22 | public class RootViewController { 23 | public Node SelectNode = new AnchorPane(); 24 | 25 | @FXML 26 | private BorderPane borderPane; 27 | 28 | @FXML 29 | private AnchorPane allpane; 30 | 31 | @FXML 32 | private TreeView RootTree; 33 | 34 | private final RootViewNodeList NodeList = new RootViewNodeList(); 35 | 36 | @FXML 37 | private void initialize() { 38 | RootTree.setRoot(RootViewNodeSet.NodeSet()); 39 | addView(); 40 | } 41 | 42 | public void addView() { 43 | Thread addview = new Thread(() -> { 44 | try { 45 | FXMLLoader indexloader = new FXMLLoader();//FXML布局加载器 46 | indexloader.setLocation(RootViewController.class.getResource("IndexAnchorpane.fxml"));//根据路径加载布局 47 | AnchorPane ap = indexloader.load(); 48 | allpane.getChildren().addAll(ap);//添加至主pane 49 | } catch (IOException e) { 50 | e.printStackTrace(); 51 | } 52 | 53 | for (String NodePath : NodeList.NodeList) { 54 | // System.out.println(NodePATH);//输出测试 55 | try { 56 | FXMLLoader loader = new FXMLLoader();//FXML布局加载器 57 | loader.setLocation(RootViewController.class.getResource(NodePath));//根据路径加载布局 58 | loader.setResources(Init.languageResourceBundle);//加载语言配置文件 59 | AnchorPane ap = loader.load(); 60 | ap.setVisible(false);//设置默认不显示 61 | allpane.getChildren().addAll(ap);//添加至主pane 62 | } catch (Exception e) { 63 | e.printStackTrace(); 64 | } 65 | } 66 | });//启动一个新线程添加节点对应的pane 67 | addview.run();//线程运行 68 | } 69 | 70 | @FXML 71 | private void getView() { 72 | if ((RootTree.getSelectionModel().getSelectedItem()).isLeaf()) { 73 | 74 | String SelectNodeValue = (RootTree.getSelectionModel().getSelectedItem().toString().split(" "))[3];//获取tree选中节点value 75 | if (Locale.getDefault().getLanguage().equals("zh")) { 76 | try { 77 | SelectNodeValue = Init.languageResourceBundle.getString(SelectNodeValue); 78 | } catch (Exception e) { 79 | System.out.println("无对应,返回原始值"); 80 | } 81 | }//如果是中文环境,做中英文对应变化 82 | // System.out.println(SelectNode);//输出选中节点value测试 83 | 84 | for (Node a : allpane.getChildren()) { 85 | if (a.getId().equals(SelectNodeValue)) { 86 | 87 | for (Node b : allpane.getChildren()) { 88 | b.setVisible(false); 89 | }//隐藏所有pane 90 | 91 | a.setVisible(true); 92 | // if(SelectNode!=a){ 93 | // Pane_Anime(SelectNode,a); 94 | // SelectNode = a; 95 | // a.setVisible(true); 96 | // } 97 | } 98 | }//显示与选中节点对应的pane 99 | }//如果选中节点是叶子节点才进行pane切换 100 | } 101 | 102 | private static void Pane_Anime(Node SelectNode,Node NextNode) { 103 | Timeline timeLine = new Timeline(); 104 | 105 | KeyValue kv_S_Start = new KeyValue(SelectNode.translateYProperty(), 0); 106 | KeyFrame kf_S_Start = new KeyFrame(Duration.seconds(0), "Start", event -> { },kv_S_Start); 107 | 108 | KeyValue kv_S_Stop = new KeyValue(SelectNode.translateYProperty(), -600); 109 | KeyFrame kf_S_Stop = new KeyFrame(Duration.seconds(0.3), "Stop", event -> { },kv_S_Stop); 110 | 111 | KeyValue kv_N_Start = new KeyValue(NextNode.translateYProperty(), 600); 112 | KeyFrame kf_N_Start = new KeyFrame(Duration.seconds(0), "Start", event -> { },kv_N_Start); 113 | 114 | KeyValue kv_N_Stop = new KeyValue(NextNode.translateYProperty(), 0); 115 | KeyFrame kf_N_Stop = new KeyFrame(Duration.seconds(0.3), "Stop", event -> { },kv_N_Stop); 116 | timeLine.getKeyFrames().addAll(kf_S_Start,kf_S_Stop,kf_N_Start,kf_N_Stop); 117 | timeLine.play(); 118 | } 119 | 120 | } 121 | -------------------------------------------------------------------------------- /src/main/java/View/UtilsView/PortScan/PortScan.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 37 | 41 | 45 | 49 | 53 | 54 | 55 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /src/main/java/View/ViewTset/Test05.java: -------------------------------------------------------------------------------- 1 | package View.ViewTset; 2 | 3 | 4 | import javafx.animation.*; 5 | import javafx.animation.PathTransition.OrientationType; 6 | import javafx.application.Application; 7 | import javafx.event.ActionEvent; 8 | import javafx.event.EventHandler; 9 | import javafx.scene.GroupBuilder; 10 | import javafx.scene.Scene; 11 | import javafx.scene.SceneBuilder; 12 | import javafx.scene.control.Button; 13 | import javafx.scene.control.ButtonBuilder; 14 | import javafx.scene.layout.HBoxBuilder; 15 | import javafx.scene.paint.Color; 16 | import javafx.scene.shape.*; 17 | import javafx.stage.Stage; 18 | import javafx.util.Duration; 19 | 20 | public class Test05 extends Application { 21 | Button startButton; 22 | Button pauseButton; 23 | Button resumeButton; 24 | Button stopButton; 25 | Ellipse ellipse = EllipseBuilder.create() 26 | .centerX(100) 27 | .centerY(50) 28 | .radiusX(4) 29 | .radiusY(8) 30 | .fill(Color.BLUE) 31 | .build(); 32 | 33 | Path path = PathBuilder.create() 34 | .elements( 35 | new MoveTo(100, 50), 36 | ArcToBuilder.create() 37 | .x(300) 38 | .y(50) 39 | .radiusX(350) 40 | .radiusY(350) 41 | .sweepFlag(true) 42 | .build() 43 | ) 44 | .build(); 45 | 46 | PathTransition anim = PathTransitionBuilder.create() 47 | .duration(new Duration(1000.0)) 48 | .node(ellipse) 49 | .path(path) 50 | .orientation(OrientationType.ORTHOGONAL_TO_TANGENT) 51 | .interpolator(Interpolator.LINEAR) 52 | .autoReverse(true) 53 | .cycleCount(Timeline.INDEFINITE) 54 | .build(); 55 | 56 | public static void main(String[] args) { 57 | Application.launch(args); 58 | } 59 | 60 | @Override 61 | public void start(Stage stage) { 62 | Scene scene = SceneBuilder.create() 63 | .width(400) 64 | .height(500) 65 | .root( 66 | GroupBuilder.create() 67 | .children( 68 | ellipse, 69 | HBoxBuilder.create() 70 | .layoutX(60) 71 | .layoutY(420) 72 | .spacing(10) 73 | .children( 74 | startButton = ButtonBuilder.create() 75 | .text("Start") 76 | .onAction(new EventHandler() { 77 | @Override public void handle(ActionEvent e) { 78 | anim.playFromStart(); 79 | } 80 | }) 81 | .build(), 82 | pauseButton = ButtonBuilder.create() 83 | .text("Pause") 84 | .onAction(new EventHandler() { 85 | @Override public void handle(ActionEvent e) { 86 | anim.pause(); 87 | } 88 | }) 89 | .build(), 90 | resumeButton = ButtonBuilder.create() 91 | .text("Resume") 92 | .onAction(new EventHandler() { 93 | @Override public void handle(ActionEvent e) { 94 | anim.play(); 95 | } 96 | }) 97 | .build(), 98 | stopButton = ButtonBuilder.create() 99 | .text("Stop") 100 | .onAction(new EventHandler() { 101 | @Override public void handle(ActionEvent e) { 102 | anim.stop(); 103 | } 104 | }) 105 | .build() 106 | ) 107 | .build() 108 | ) 109 | .build() 110 | ) 111 | .build(); 112 | 113 | startButton.disableProperty().bind(anim.statusProperty() 114 | .isNotEqualTo(Animation.Status.STOPPED)); 115 | pauseButton.disableProperty().bind(anim.statusProperty() 116 | .isNotEqualTo(Animation.Status.RUNNING)); 117 | resumeButton.disableProperty().bind(anim.statusProperty() 118 | .isNotEqualTo(Animation.Status.PAUSED)); 119 | stopButton.disableProperty().bind(anim.statusProperty() 120 | .isEqualTo(Animation.Status.STOPPED)); 121 | 122 | stage.setScene(scene); 123 | stage.setTitle("Metronome using PathTransition"); 124 | stage.show(); 125 | } 126 | } -------------------------------------------------------------------------------- /src/main/java/View/UtilsView/DNSScan/DNSScan.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 64 | 65 | 66 | 67 | 68 | 69 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | -------------------------------------------------------------------------------- /.idea/uiDesigner.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | -------------------------------------------------------------------------------- /src/main/java/View/UtilsView/PortScan/PortScanController.java: -------------------------------------------------------------------------------- 1 | package View.UtilsView.PortScan; 2 | 3 | import Init.Init; 4 | import com.jfoenix.controls.JFXButton; 5 | import com.jfoenix.controls.JFXListView; 6 | import com.jfoenix.controls.JFXSpinner; 7 | import com.jfoenix.controls.JFXTextField; 8 | import com.jfoenix.validation.RequiredFieldValidator; 9 | import javafx.collections.FXCollections; 10 | import javafx.collections.ObservableList; 11 | import javafx.concurrent.Task; 12 | import javafx.fxml.FXML; 13 | import javafx.scene.control.Alert; 14 | import javafx.stage.Stage; 15 | 16 | import java.awt.*; 17 | import java.awt.datatransfer.Clipboard; 18 | import java.awt.datatransfer.StringSelection; 19 | import java.awt.datatransfer.Transferable; 20 | import java.io.IOException; 21 | import java.net.InetSocketAddress; 22 | import java.net.Socket; 23 | import java.net.SocketAddress; 24 | import java.util.Objects; 25 | import java.util.concurrent.Executor; 26 | import java.util.concurrent.Executors; 27 | 28 | public class PortScanController { 29 | private final PortScanBean bean = new PortScanBean(); 30 | private static int PORT_CONTER = 0; 31 | 32 | @FXML private JFXTextField target; 33 | @FXML private JFXTextField start_port; 34 | @FXML private JFXTextField end_port; 35 | @FXML private JFXTextField thred_count; 36 | @FXML private JFXTextField delay; 37 | @FXML private JFXTextField state; 38 | 39 | @FXML private JFXButton startBT; 40 | @FXML private JFXSpinner spinner; 41 | @FXML private JFXButton littleBT01; 42 | @FXML private JFXButton littleBT02; 43 | @FXML private JFXButton littleBT03; 44 | 45 | // @FXML private TextArea ResultArea; 46 | @FXML private JFXListView ResultListView; 47 | 48 | PortScanIcon icon = new PortScanIcon(); 49 | ObservableList ResultPortList = FXCollections.observableArrayList(); 50 | 51 | @FXML private void initialize(){ 52 | spinner.setVisible(false); 53 | littleBT01.setGraphic(icon.sort_desc); 54 | littleBT02.setGraphic(icon.book_mark_fill); 55 | littleBT03.setGraphic(icon.clipbord); 56 | validatorSet(); 57 | inputCheck(); 58 | } 59 | 60 | @FXML private void Startscan(){ 61 | PORT_CONTER = 1; 62 | 63 | ResultPortList.clear(); 64 | ResultListView.setItems(ResultPortList); 65 | 66 | spinner.setProgress(0); 67 | spinner.setVisible(true); 68 | startBT.setDisable(true); 69 | state.setVisible(false); 70 | BeanSet(); 71 | PortScan(); 72 | } 73 | 74 | @FXML private void PortOrder(){ 75 | for(int i=0;iInteger.parseInt(ResultPortList.get(j+1))){ 79 | String temp = ResultPortList.get(j); 80 | ResultPortList.set(j,ResultPortList.get(j+1)); 81 | ResultPortList.set(j+1,temp); 82 | } 83 | } 84 | } 85 | } 86 | 87 | @FXML private void PortFast(){ 88 | new PortFast().start(new Stage()); 89 | } 90 | 91 | @FXML private void PortCopy(){ 92 | StringBuilder result = new StringBuilder(); 93 | for (String a:ResultPortList) { 94 | result.append(a).append("\n"); 95 | } 96 | 97 | Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard(); 98 | Transferable tText = new StringSelection(result.toString()); 99 | clip.setContents(tText, null); 100 | 101 | Alert alert = new Alert(Alert.AlertType.INFORMATION); 102 | alert.setGraphic(icon.clipbord_alert); 103 | alert.setTitle(Init.languageResourceBundle.getString("Infomation")); 104 | alert.setHeaderText(Init.languageResourceBundle.getString("Copy_Complete")); 105 | alert.setContentText(Init.languageResourceBundle.getString("Copy_Complete_message")); 106 | alert.showAndWait(); 107 | } 108 | 109 | private void validatorSet(){ 110 | RequiredFieldValidator target_validator = new RequiredFieldValidator("¿ NULL ?"); 111 | RequiredFieldValidator start_port_validator = new RequiredFieldValidator("0-65535"); 112 | RequiredFieldValidator end_port_validator = new RequiredFieldValidator("0-65535"); 113 | RequiredFieldValidator thred_count_validator = new RequiredFieldValidator("¿ NULL ?"); 114 | RequiredFieldValidator delay_validator = new RequiredFieldValidator("¿ NULL ?"); 115 | 116 | target.setValidators(target_validator); 117 | start_port.setValidators(start_port_validator); 118 | end_port.setValidators(end_port_validator); 119 | thred_count.setValidators(thred_count_validator); 120 | delay.setValidators(delay_validator); 121 | } 122 | 123 | private void inputCheck(){ 124 | start_port.focusedProperty().addListener((observable, oldValue, newValue) -> { 125 | if (!newValue) { 126 | start_port.validate(); 127 | } 128 | }); 129 | 130 | end_port.focusedProperty().addListener((observable, oldValue, newValue) -> { 131 | if (!newValue) { 132 | end_port.validate(); 133 | } 134 | }); 135 | 136 | thred_count.focusedProperty().addListener((observable, oldValue, newValue) -> { 137 | if (!newValue) { 138 | thred_count.validate(); 139 | } 140 | }); 141 | 142 | delay.focusedProperty().addListener((observable, oldValue, newValue) -> { 143 | if (!newValue) { 144 | delay.validate(); 145 | } 146 | }); 147 | } 148 | 149 | private void ResultSet(String Port){ 150 | if(Port!=null){ 151 | synchronized(this) { 152 | ResultPortList.add(Port); 153 | } 154 | } 155 | } 156 | 157 | private void BeanSet(){ 158 | try{ 159 | bean.setTarget(target.getText()); 160 | bean.setStart_port(Integer.parseInt(start_port.getText())); 161 | bean.setEnd_port(Integer.parseInt(end_port.getText())); 162 | bean.setThread_count(Integer.parseInt(thred_count.getText())); 163 | bean.setDelay(Integer.parseInt(delay.getText())); 164 | bean.setState(state.getText()); 165 | }catch (Exception e){ 166 | e.printStackTrace(); 167 | } 168 | } 169 | 170 | private void PortScanEnd(){ 171 | startBT.setDisable(false); 172 | spinner.setVisible(false); 173 | state.setVisible(true); 174 | } 175 | 176 | private void ProgressSet(){ 177 | PortCountAdd(); 178 | spinner.setProgress((double)PORT_CONTER/bean.getEnd_port()); 179 | } 180 | 181 | private void PortCountAdd(){ 182 | synchronized(this) { 183 | PORT_CONTER++; 184 | } 185 | } 186 | 187 | private void PortScan() { 188 | Executor exec = Executors.newFixedThreadPool(bean.getThread_count(), runnable -> { 189 | Thread t = Executors.defaultThreadFactory().newThread(runnable); 190 | t.setDaemon(true); 191 | return t ; 192 | }); 193 | 194 | for (int Port = bean.getStart_port(); Port <= bean.getEnd_port(); Port++) { 195 | int NPort = Port; 196 | Task task = new Task() { 197 | @Override 198 | public String call() { 199 | // in real life, do real work here... 200 | if (Objects.equals(PortScanner(bean.getTarget(), NPort, bean.getDelay()), "OPEN")) { 201 | // System.out.println(NPort + ": open"); 202 | ProgressSet(); 203 | // ResultSet(String.valueOf(NPort)); 204 | if(PORT_CONTER>=bean.getEnd_port()) 205 | { 206 | PortScanEnd(); 207 | } 208 | return String.valueOf(NPort); // value to be processed in onSucceeded 209 | } else { 210 | // System.out.println(NPort); 211 | ProgressSet(); 212 | if(PORT_CONTER>=bean.getEnd_port()) 213 | { 214 | PortScanEnd(); 215 | } 216 | return null; // value to be processed in onSucceeded 217 | } 218 | } 219 | }; 220 | task.setOnSucceeded(e -> ResultSet(task.getValue())); 221 | exec.execute(task); 222 | } 223 | } 224 | 225 | private String PortScanner(String address, int port, int delay) { 226 | String result = "OPEN"; 227 | Socket socket; 228 | try { 229 | socket = new Socket(); 230 | SocketAddress addport = new InetSocketAddress(address, port); 231 | socket.connect(addport, delay); 232 | socket.close(); 233 | } catch (IOException e) { 234 | result = "CLOSE"; 235 | } 236 | return result; 237 | } 238 | } 239 | -------------------------------------------------------------------------------- /src/main/java/View/UtilsView/DirectoryScan/DirectoryScan.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | -------------------------------------------------------------------------------- /src/main/java/View/UtilsView/DirectoryScan/StstusCodeFast.java: -------------------------------------------------------------------------------- 1 | package View.UtilsView.DirectoryScan; 2 | 3 | import javafx.application.Application; 4 | import javafx.scene.Group; 5 | import javafx.scene.Scene; 6 | import javafx.scene.image.Image; 7 | import javafx.scene.layout.VBox; 8 | import javafx.scene.web.WebEngine; 9 | import javafx.scene.web.WebView; 10 | import javafx.stage.Stage; 11 | 12 | public class StstusCodeFast extends Application { 13 | 14 | final String a = "

信息响应(100)

\n" + 15 | "\n" + 16 | "

100 Continue

\n" + 17 | "\n" + 18 | "

这个临时响应表明,迄今为止的所有内容都是可行的,客户端应该继续请求,如果已经完成,则忽略它。

\n" + 19 | "\n" + 20 | "

101 Switching Protocol

\n" + 21 | "\n" + 22 | "

该代码是响应客户端的 Upgrade 标头发送的,并且指示服务器也正在切换的协议。

\n" + 23 | "\n" + 24 | "

102 Processing (WebDAV)

\n" + 25 | "\n" + 26 | "

此代码表示服务器已收到并正在处理该请求,但没有响应可用。

\n" + 27 | "\n" + 28 | "

103 Early Hints

\n" + 29 | "\n" + 30 | "

此状态代码主要用于与Link 链接头一起使用,以允许用户代理在服务器仍在准备响应时开始预加载资源。

\n" + 31 | "\n" + 32 | "

成功响应(200)

\n" + 33 | "\n" + 34 | "

200 OK

\n" + 35 | "\n" + 36 | "

请求成功。成功的含义取决于HTTP方法:

GET:资源已被提取并在消息正文中传输。

HEAD:实体标头位于消息正文中。

POST:描述动作结果的资源在消息体中传输。

TRACE:消息正文包含服务器收到的请求消息

\n" + 37 | "\n" + 38 | "

201 Created

\n" + 39 | "\n" + 40 | "

该请求已成功,并因此创建了一个新的资源。这通常是在POST请求,或是某些PUT请求之后返回的响应。

\n" + 41 | "\n" + 42 | "

202 Accepted

\n" + 43 | "\n" + 44 | "

请求已经接收到,但还未响应,没有结果。意味着不会有一个异步的响应去表明当前请求的结果,预期另外的进程和服务去处理请求,或者批处理。

\n" + 45 | "\n" + 46 | "

203 Non-Authoritative Information

\n" + 47 | "\n" + 48 | "

服务器已成功处理了请求,但返回的实体头部元信息不是在原始服务器上有效的确定集合,而是来自本地或者第三方的拷贝。当前的信息可能是原始版本的子集或者超集。例如,包含资源的元数据可能导致原始服务器知道元信息的超集。使用此状态码不是必须的,而且只有在响应不使用此状态码便会返回200 OK的情况下才是合适的。

\n" + 49 | "\n" + 50 | "

204 No Content

\n" + 51 | "\n" + 52 | "

服务器成功处理了请求,但不需要返回任何实体内容,并且希望返回更新了的元信息。响应可能通过实体头部的形式,返回新的或更新后的元信息。如果存在这些头部信息,则应当与所请求的变量相呼应。如果客户端是浏览器的话,那么用户浏览器应保留发送了该请求的页面,而不产生任何文档视图上的变化,即使按照规范新的或更新后的元信息应当被应用到用户浏览器活动视图中的文档。由于204响应被禁止包含任何消息体,因此它始终以消息头后的第一个空行结尾。

\n" + 53 | "\n" + 54 | "

205 Reset Content

\n" + 55 | "\n" + 56 | "

服务器成功处理了请求,且没有返回任何内容。但是与204响应不同,返回此状态码的响应要求请求者重置文档视图。该响应主要是被用于接受用户输入后,立即重置表单,以便用户能够轻松地开始另一次输入。与204响应一样,该响应也被禁止包含任何消息体,且以消息头后的第一个空行结束。

\n" + 57 | "\n" + 58 | "

206 Partial Content

\n" + 59 | "\n" + 60 | "

服务器已经成功处理了部分 GET 请求。类似于 FlashGet 或者迅雷这类的 HTTP 下载工具都是使用此类响应实现断点续传或者将一个大文档分解为多个下载段同时下载。该请求必须包含 Range 头信息来指示客户端希望得到的内容范围,并且可能包含 If-Range 来作为请求条件。

\n" + 61 | "\n" + 62 | "

207 Multi-Status (WebDAV)

\n" + 63 | "\n" + 64 | "

由WebDAV(RFC 2518)扩展的状态码,代表之后的消息体将是一个XML消息,并且可能依照之前子请求数量的不同,包含一系列独立的响应代码。

\n" + 65 | "\n" + 66 | "

208 Already Reported (WebDAV)

\n" + 67 | "\n" + 68 | "

在 DAV 里面使用: propstat 响应元素以避免重复枚举多个绑定的内部成员到同一个集合。

\n" + 69 | "\n" + 70 | "

226 IM Used (HTTP Delta encoding)

\n" + 71 | "\n" + 72 | "

服务器已经完成了对资源的 GET 请求,并且响应是对当前实例应用的一个或多个实例操作结果的表示。

\n" + 73 | "\n" + 74 | "

重定向(300)

\n" + 75 | "\n" + 76 | "

300 Multiple Choice

\n" + 77 | "\n" + 78 | "

被请求的资源有一系列可供选择的回馈信息,每个都有自己特定的地址和浏览器驱动的商议信息。用户或浏览器能够自行选择一个首选的地址进行重定向。

\n" + 79 | "\n" + 80 | "

301 Moved Permanently

\n" + 81 | "\n" + 82 | "

被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个 URI 之一。如果可能,拥有链接编辑功能的客户端应当自动把请求的地址修改为从服务器反馈回来的地址。除非额外指定,否则这个响应也是可缓存的。

\n" + 83 | "\n" + 84 | "

302 Found

\n" + 85 | "\n" + 86 | "

请求的资源现在临时从不同的 URI 响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。

\n" + 87 | "\n" + 88 | "

303 See Other

\n" + 89 | "\n" + 90 | "

对应当前请求的响应可以在另一个 URI 上被找到,而且客户端应当采用 GET 的方式访问那个资源。这个方法的存在主要是为了允许由脚本激活的POST请求输出重定向到一个新的资源。

\n" + 91 | "\n" + 92 | "

304 Not Modified

\n" + 93 | "\n" + 94 | "

如果客户端发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码。304 响应禁止包含消息体,因此始终以消息头后的第一个空行结尾。

\n" + 95 | "\n" + 96 | "

305 Use Proxy

\n" + 97 | "\n" + 98 | "

被请求的资源必须通过指定的代理才能被访问。Location 域中将给出指定的代理所在的 URI 信息,接收者需要重复发送一个单独的请求,通过这个代理才能访问相应资源。只有原始服务器才能建立305响应。

\n" + 99 | "\n" + 100 | "

306 unused

\n" + 101 | "\n" + 102 | "

在最新版的规范中,306 状态码已经不再被使用。

\n" + 103 | "\n" + 104 | "

307 Temporary Redirect

\n" + 105 | "\n" + 106 | "

请求的资源现在临时从不同的URI 响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。

\n" + 107 | "\n" + 108 | "

308 Permanent Redirect

\n" + 109 | "\n" + 110 | "

这意味着资源现在永久位于由 Location: HTTP Response 标头指定的另一个 URI。 这与 301 Moved Permanently HTTP 响应代码具有相同的语义,但用户代理不能更改所使用的 HTTP 方法:如果在第一个请求中使用 POST,则必须在第二个请求中使用 POST。

\n" + 111 | "\n" + 112 | "

客户端响应(400)

\n" + 113 | "\n" + 114 | "

400 Bad Request

\n" + 115 | "\n" + 116 | "

1、语义有误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求。

2、请求参数有误。

\n" + 117 | "\n" + 118 | "

401 Unauthorized

\n" + 119 | "\n" + 120 | "

当前请求需要用户验证。该响应必须包含一个适用于被请求资源的 WWW-Authenticate 信息头用以询问用户信息。客户端可以重复提交一个包含恰当的 Authorization 头信息的请求。如果当前请求已经包含了 Authorization 证书,那么401响应代表着服务器验证已经拒绝了那些证书。如果401响应包含了与前一个响应相同的身份验证询问,且浏览器已经至少尝试了一次验证,那么浏览器应当向用户展示响应中包含的实体信息,因为这个实体信息中可能包含了相关诊断信息。

\n" + 121 | "\n" + 122 | "

402 Payment Required

\n" + 123 | "\n" + 124 | "

此响应码保留以便将来使用,创造此响应码的最初目的是用于数字支付系统,然而现在并未使用。

\n" + 125 | "\n" + 126 | "

403 Forbidden

\n" + 127 | "\n" + 128 | "

服务器已经理解请求,但是拒绝执行它。与 401 响应不同的是,身份验证并不能提供任何帮助,而且这个请求也不应该被重复提交。如果这不是一个 HEAD 请求,而且服务器希望能够讲清楚为何请求不能被执行,那么就应该在实体内描述拒绝的原因。当然服务器也可以返回一个 404 响应,假如它不希望让客户端获得任何信息。

\n" + 129 | "\n" + 130 | "

404 Not Found

\n" + 131 | "\n" + 132 | "

请求失败,请求所希望得到的资源未被在服务器上发现。没有信息能够告诉用户这个状况到底是暂时的还是永久的。假如服务器知道情况的话,应当使用410状态码来告知旧资源因为某些内部的配置机制问题,已经永久的不可用,而且没有任何可以跳转的地址。404这个状态码被广泛应用于当服务器不想揭示到底为何请求被拒绝或者没有其他适合的响应可用的情况下。

\n" + 133 | "\n" + 134 | "

405 Method Not Allowed

\n" + 135 | "\n" + 136 | "

请求行中指定的请求方法不能被用于请求相应的资源。该响应必须返回一个Allow 头信息用以表示出当前资源能够接受的请求方法的列表。 鉴于 PUT,DELETE 方法会对服务器上的资源进行写操作,因而绝大部分的网页服务器都不支持或者在默认配置下不允许上述请求方法,对于此类请求均会返回405错误。

\n" + 137 | "\n" + 138 | "

406 Not Acceptable

\n" + 139 | "\n" + 140 | "

请求的资源的内容特性无法满足请求头中的条件,因而无法生成响应实体。

\n" + 141 | "\n" + 142 | "

407 Proxy Authentication Required

\n" + 143 | "\n" + 144 | "

与401响应类似,只不过客户端必须在代理服务器上进行身份验证。代理服务器必须返回一个 Proxy-Authenticate 用以进行身份询问。客户端可以返回一个 Proxy-Authorization 信息头用以验证。

\n" + 145 | "\n" + 146 | "

408 Request Timeout

\n" + 147 | "\n" + 148 | "

请求超时。客户端没有在服务器预备等待的时间内完成一个请求的发送。客户端可以随时再次提交这一请求而无需进行任何更改。

\n" + 149 | "\n" + 150 | "

409 Conflict

\n" + 151 | "\n" + 152 | "

由于和被请求的资源的当前状态之间存在冲突,请求无法完成。这个代码只允许用在这样的情况下才能被使用:用户被认为能够解决冲突,并且会重新提交新的请求。该响应应当包含足够的信息以便用户发现冲突的源头。

\n" + 153 | "\n" + 154 | "

410 Gone

\n" + 155 | "\n" + 156 | "

被请求的资源在服务器上已经不再可用,而且没有任何已知的转发地址。这样的状况应当被认为是永久性的。如果可能,拥有链接编辑功能的客户端应当在获得用户许可后删除所有指向这个地址的引用。如果服务器不知道或者无法确定这个状况是否是永久的,那么就应该使用 404 状态码。除非额外说明,否则这个响应是可缓存的。

\n" + 157 | "\n" + 158 | "

411 Length Required

\n" + 159 | "\n" + 160 | "

服务器拒绝在没有定义 Content-Length 头的情况下接受请求。在添加了表明请求消息体长度的有效 Content-Length 头之后,客户端可以再次提交该请求。

\n" + 161 | "\n" + 162 | "

412 Precondition Failed

\n" + 163 | "\n" + 164 | "

服务器在验证在请求的头字段中给出先决条件时,没能满足其中的一个或多个。这个状态码允许客户端在获取资源时在请求的元信息(请求头字段数据)中设置先决条件,以此避免该请求方法被应用到其希望的内容以外的资源上。

\n" + 165 | "\n" + 166 | "

413 Payload Too Large

\n" + 167 | "\n" + 168 | "

服务器拒绝处理当前请求,因为该请求提交的实体数据大小超过了服务器愿意或者能够处理的范围。此种情况下,服务器可以关闭连接以免客户端继续发送此请求。如果这个状况是临时的,服务器应当返回一个 Retry-After 的响应头,以告知客户端可以在多少时间以后重新尝试。

\n" + 169 | "\n" + 170 | "

414 URI Too Long

\n" + 171 | "\n" + 172 | "

请求的URI 长度超过了服务器能够解释的长度,因此服务器拒绝对该请求提供服务。这比较少见,通常的情况包括:本应使用POST方法的表单提交变成了GET方法,导致查询字符串(Query String)过长。

\n" + 173 | "\n" + 174 | "

415 Unsupported Media Type

\n" + 175 | "\n" + 176 | "

对于当前请求的方法和所请求的资源,请求中提交的实体并不是服务器中所支持的格式,因此请求被拒绝。

\n" + 177 | "\n" + 178 | "

416 Range Not Satisfiable

\n" + 179 | "\n" + 180 | "

如果请求中包含了 Range 请求头,并且 Range 中指定的任何数据范围都与当前资源的可用范围不重合,同时请求中又没有定义 If-Range 请求头,那么服务器就应当返回416状态码。

\n" + 181 | "\n" + 182 | "

417 Expectation Failed

\n" + 183 | "\n" + 184 | "

此响应代码意味着服务器无法满足 Expect 请求标头字段指示的期望值。

\n" + 185 | "\n" + 186 | "

418 I'm a teapot

\n" + 187 | "\n" + 188 | "

服务器拒绝尝试用 “茶壶冲泡咖啡”。

\n" + 189 | "\n" + 190 | "

421 Misdirected Request

\n" + 191 | "\n" + 192 | "

该请求针对的是无法产生响应的服务器。 这可以由服务器发送,该服务器未配置为针对包含在请求 URI 中的方案和权限的组合产生响应。

\n" + 193 | "\n" + 194 | "

422 Unprocessable Entity (WebDAV)

\n" + 195 | "\n" + 196 | "

请求格式良好,但由于语义错误而无法遵循。

\n" + 197 | "\n" + 198 | "

423 Locked (WebDAV)

\n" + 199 | "\n" + 200 | "

正在访问的资源被锁定。

\n" + 201 | "\n" + 202 | "

424 Failed Dependency (WebDAV)

\n" + 203 | "\n" + 204 | "

由于先前的请求失败,所以此次请求失败。

\n" + 205 | "\n" + 206 | "

425 Too Early

\n" + 207 | "\n" + 208 | "

服务器不愿意冒着风险去处理可能重播的请求。

\n" + 209 | "\n" + 210 | "

426 Upgrade Required

\n" + 211 | "\n" + 212 | "

服务器拒绝使用当前协议执行请求,但可能在客户机升级到其他协议后愿意这样做。 服务器在 426 响应中发送 Upgrade 头以指示所需的协议。

\n" + 213 | "\n" + 214 | "

428 Precondition Required

\n" + 215 | "\n" + 216 | "

原始服务器要求该请求是有条件的。 旨在防止“丢失更新”问题,即客户端获取资源状态,修改该状态并将其返回服务器,同时第三方修改服务器上的状态,从而导致冲突。

\n" + 217 | "\n" + 218 | "

429 Too Many Requests

\n" + 219 | "\n" + 220 | "

用户在给定的时间内发送了太多请求(“限制请求速率”)。

\n" + 221 | "\n" + 222 | "

431 Request Header Fields Too Large

\n" + 223 | "\n" + 224 | "

服务器不愿意处理请求,因为它的 请求头字段太大( Request Header Fields Too Large)。 请求可以在减小请求头字段的大小后重新提交。

\n" + 225 | "\n" + 226 | "

451 Unavailable For Legal Reasons

\n" + 227 | "\n" + 228 | "

用户请求非法资源,例如:由政府审查的网页。

\n" + 229 | "\n" + 230 | "

服务端响应(500)

\n" + 231 | "\n" + 232 | "

500 Internal Server Error

\n" + 233 | "\n" + 234 | "

服务器遇到了不知道如何处理的情况。

\n" + 235 | "\n" + 236 | "

501 Not Implemented

\n" + 237 | "\n" + 238 | "

此请求方法不被服务器支持且无法被处理。只有GET和HEAD是要求服务器支持的,它们必定不会返回此错误代码。

\n" + 239 | "\n" + 240 | "

502 Bad Gateway

\n" + 241 | "\n" + 242 | "

此错误响应表明服务器作为网关需要得到一个处理这个请求的响应,但是得到一个错误的响应。

\n" + 243 | "\n" + 244 | "

503 Service Unavailable

\n" + 245 | "\n" + 246 | "

服务器没有准备好处理请求。 常见原因是服务器因维护或重载而停机。 请注意,与此响应一起,应发送解释问题的用户友好页面。 这个响应应该用于临时条件和 Retry-After:如果可能的话,HTTP头应该包含恢复服务之前的估计时间。 网站管理员还必须注意与此响应一起发送的与缓存相关的标头,因为这些临时条件响应通常不应被缓存。

\n" + 247 | "\n" + 248 | "

504 Gateway Timeout

\n" + 249 | "\n" + 250 | "

当服务器作为网关,不能及时得到响应时返回此错误代码。

\n" + 251 | "\n" + 252 | "

505 HTTP Version Not Supported

\n" + 253 | "\n" + 254 | "

服务器不支持请求中所使用的HTTP协议版本。

\n" + 255 | "\n" + 256 | "

506 Variant Also Negotiates

\n" + 257 | "\n" + 258 | "

服务器有一个内部配置错误:对请求的透明内容协商导致循环引用。

\n" + 259 | "\n" + 260 | "

507 Insufficient Storage

\n" + 261 | "\n" + 262 | "

服务器有内部配置错误:所选的变体资源被配置为参与透明内容协商本身,因此不是协商过程中的适当端点。

\n" + 263 | "\n" + 264 | "

508 Loop Detected (WebDAV)

\n" + 265 | "\n" + 266 | "

服务器在处理请求时检测到无限循环。

\n" + 267 | "\n" + 268 | "

510 Not Extended

\n" + 269 | "\n" + 270 | "

客户端需要对请求进一步扩展,服务器才能实现它。服务器会回复客户端发出扩展请求所需的所有信息。

\n" + 271 | "\n" + 272 | "

511 Network Authentication Required

\n" + 273 | "\n" + 274 | "

511 状态码指示客户端需要进行身份验证才能获得网络访问权限。

"; 275 | 276 | @Override 277 | public void start(Stage primaryStage) { 278 | primaryStage.setTitle("StstusCodeFast"); 279 | primaryStage.setWidth(670); 280 | primaryStage.setHeight(800); 281 | primaryStage.setResizable(false); 282 | primaryStage.getIcons().add(new Image(StstusCodeFast.class.getResourceAsStream("/img/icon/book-2-line.png"))); 283 | VBox root = new VBox(); 284 | Scene scene = new Scene(new Group()); 285 | final WebView browser = new WebView(); 286 | final WebEngine webEngine = browser.getEngine(); 287 | 288 | browser.setPrefHeight(800); 289 | 290 | webEngine.loadContent(a); 291 | 292 | root.getChildren().addAll(browser); 293 | scene.setRoot(root); 294 | 295 | primaryStage.setScene(scene); 296 | primaryStage.show(); 297 | } 298 | } 299 | -------------------------------------------------------------------------------- /src/main/java/View/UtilsView/DirectoryScan/DirectoryScanController.java: -------------------------------------------------------------------------------- 1 | package View.UtilsView.DirectoryScan; 2 | 3 | import Init.Init; 4 | import com.jfoenix.controls.*; 5 | import javafx.animation.KeyFrame; 6 | import javafx.animation.KeyValue; 7 | import javafx.animation.Timeline; 8 | import javafx.application.Platform; 9 | import javafx.collections.FXCollections; 10 | import javafx.collections.ObservableList; 11 | import javafx.concurrent.Task; 12 | import javafx.fxml.FXML; 13 | import javafx.geometry.Pos; 14 | import javafx.scene.control.Alert; 15 | import javafx.scene.layout.AnchorPane; 16 | import javafx.stage.FileChooser; 17 | import javafx.stage.Stage; 18 | import javafx.util.Duration; 19 | 20 | import javax.swing.filechooser.FileSystemView; 21 | import java.awt.*; 22 | import java.awt.datatransfer.Clipboard; 23 | import java.awt.datatransfer.StringSelection; 24 | import java.awt.datatransfer.Transferable; 25 | import java.io.File; 26 | import java.io.FileOutputStream; 27 | import java.io.OutputStreamWriter; 28 | import java.util.ArrayList; 29 | import java.util.concurrent.Executor; 30 | import java.util.concurrent.Executors; 31 | 32 | public class DirectoryScanController { 33 | DirectoryScanBean bean = new DirectoryScanBean(); 34 | DirectoryScanIcon directoryScanIcon = new DirectoryScanIcon(); 35 | DirectoryScanImpl directoryScanimpl = new DirectoryScanImpl(); 36 | 37 | ArrayList allCheckBoxList = new ArrayList<>(); 38 | 39 | ObservableList ResultList = FXCollections.observableArrayList(); 40 | 41 | private static int SCAN_CONTER = 0; 42 | private static String PROTOCOL = "http://"; 43 | 44 | @FXML AnchorPane settingPane; 45 | @FXML AnchorPane resultPane; 46 | @FXML JFXComboBox CB_Protocol; 47 | 48 | @FXML JFXTextField field_target; 49 | @FXML JFXTextField field_dicPath; 50 | @FXML JFXTextField field_preview; 51 | 52 | @FXML JFXTextField field_threadCount; 53 | @FXML JFXTextField field_delay; 54 | @FXML JFXTextField field_dicCount; 55 | @FXML JFXTextField field_state; 56 | 57 | @FXML JFXCheckBox check_200_box; 58 | @FXML JFXCheckBox check_301_box; 59 | @FXML JFXCheckBox check_302_box; 60 | @FXML JFXCheckBox check_303_box; 61 | @FXML JFXCheckBox check_401_box; 62 | @FXML JFXCheckBox check_403_box; 63 | @FXML JFXCheckBox check_404_box; 64 | @FXML JFXCheckBox check_1XX_box; 65 | @FXML JFXCheckBox check_2XX_box; 66 | @FXML JFXCheckBox check_3XX_box; 67 | @FXML JFXCheckBox check_4XX_box; 68 | @FXML JFXCheckBox check_5XX_box; 69 | @FXML JFXCheckBox check_ALL_box; 70 | 71 | @FXML JFXButton BT_start; 72 | @FXML JFXButton BT_selectDic; 73 | @FXML JFXButton BT_next; 74 | @FXML JFXButton BT_back; 75 | 76 | @FXML JFXComboBox CB_filter; 77 | 78 | @FXML JFXButton LBT_save; 79 | @FXML JFXButton LBT_ststusCodeFast; 80 | @FXML JFXButton LBT_copy; 81 | @FXML JFXButton LBT_order; 82 | @FXML JFXButton LBT_05; 83 | 84 | @FXML 85 | JFXListView view_result; 86 | 87 | @FXML JFXProgressBar progressBar; 88 | @FXML JFXSpinner spinner; 89 | 90 | @FXML private void initialize(){ 91 | LBT_ststusCodeFast.setGraphic(directoryScanIcon.book_mark_fill); 92 | LBT_save.setGraphic(directoryScanIcon.save_fill); 93 | BT_back.setGraphic(directoryScanIcon.arrow_go_back); 94 | BT_next.setGraphic(directoryScanIcon.arrow_right); 95 | LBT_copy.setGraphic(directoryScanIcon.clipbord); 96 | LBT_order.setGraphic(directoryScanIcon.sort_desc); 97 | 98 | view_result.setItems(ResultList); 99 | 100 | BT_start.setDisable(true); 101 | initCB_CB_Protocol(); 102 | FieldsListener(); 103 | CheckBoxListCreate(); 104 | } 105 | // Button 106 | @FXML private void OnBT_start(){ 107 | initOnBT_start(); 108 | initCB_filter(); 109 | ResultList.clear(); 110 | paneCheckAnime(resultPane,settingPane); 111 | BT_start.setDisable(true); 112 | DirectoryScan(); 113 | } 114 | 115 | private void initOnBT_start(){ 116 | progressBar.lookup(".bar").setStyle("-fx-background-color: #26a7e2;"); 117 | bean.setThreadCount(Integer.parseInt(field_threadCount.getText())); 118 | bean.setDelay(Integer.parseInt(field_delay.getText())); 119 | field_state.setVisible(false); 120 | spinner.setVisible(true); 121 | SCAN_CONTER = 0; 122 | CB_filter.setDisable(true); 123 | } 124 | 125 | @FXML private void OnDirectory_select(){ 126 | bean.setDirectoryFile(directoryScanimpl.DirectoryGet(Init.languageResourceBundle.getString("FileChooserTitle"))); 127 | try{ 128 | field_dicPath.setText(bean.getDirectoryFile().toString()); 129 | field_dicPath.setAlignment(Pos.CENTER_LEFT); 130 | bean.setDirectoryLineCountNum(directoryScanimpl.DirectoryLineGet(bean.getDirectoryFile())); 131 | field_dicCount.setText(String.valueOf(bean.getDirectoryLineCountNum())); 132 | bean.setDirectoryText(directoryScanimpl.DirectoryTextGet(bean.getDirectoryFile())); 133 | // for (String a: bean.getDirectoryText()) { System.out.println(a); } 134 | // System.out.println(bean.getDirectoryFile()); 135 | }catch (Exception e){ 136 | e.printStackTrace(); 137 | } 138 | } 139 | 140 | @FXML private void OnBT_back(){ 141 | paneCheckAnime(settingPane,resultPane); 142 | } 143 | 144 | @FXML private void OnBT_next(){ 145 | paneCheckAnime(resultPane,settingPane); 146 | } 147 | 148 | @FXML private void OnLBT_save(){ 149 | FileChooser fileChooser = new FileChooser(); 150 | FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("TXT files (*.txt)", "*.txt"); 151 | fileChooser.getExtensionFilters().add(extFilter); 152 | Stage s = new Stage(); 153 | FileSystemView fsv = FileSystemView.getFileSystemView(); 154 | fileChooser.setInitialDirectory(fsv.getHomeDirectory()); 155 | fileChooser.setInitialFileName("Result"); 156 | File file = fileChooser.showSaveDialog(s); 157 | if(file==null) { 158 | return; 159 | }else{ 160 | try { 161 | OutputStreamWriter OSW = new OutputStreamWriter(new FileOutputStream(file), "utf-8"); 162 | for (String a:view_result.getItems()) { 163 | OSW.write(a.replace(" "," "+PROTOCOL+bean.getTargetURL())+"\n"); 164 | //System.out.println(a.substring(0,3)); 165 | } 166 | OSW.flush(); 167 | OSW.close(); 168 | Desktop.getDesktop().open(file); 169 | } catch (Exception e) { 170 | e.printStackTrace(); 171 | } 172 | } 173 | // String exportFilePath = file.getAbsolutePath(); 174 | // System.out.println(exportFilePath); 175 | } 176 | 177 | @FXML private void OnLBT_ststusCodeFast(){ 178 | new StstusCodeFast().start(new Stage()); 179 | } 180 | 181 | @FXML private void OnLBT_copy(){ 182 | StringBuilder result = new StringBuilder(); 183 | for (String a:view_result.getItems()) { 184 | result.append(a).append("\n"); 185 | } 186 | 187 | Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard(); 188 | Transferable tText = new StringSelection(result.toString()); 189 | clip.setContents(tText, null); 190 | 191 | Alert alert = new Alert(Alert.AlertType.INFORMATION); 192 | alert.setGraphic(directoryScanIcon.clipbord_alert); 193 | alert.setTitle(Init.languageResourceBundle.getString("Infomation")); 194 | alert.setHeaderText(Init.languageResourceBundle.getString("Copy_Complete")); 195 | alert.setContentText(Init.languageResourceBundle.getString("Copy_Complete_message")); 196 | alert.showAndWait(); 197 | } 198 | 199 | @FXML private void OnLBT_order(){ 200 | for (int i = 0; i < view_result.getItems().size()-1; i++) { 201 | for (int j = 0; j < view_result.getItems().size()-1; j++) { 202 | if(Integer.parseInt((view_result.getItems().get(j)).substring(0,3))>Integer.parseInt((view_result.getItems().get(j+1)).substring(0,3))){ 203 | String Temp = view_result.getItems().get(j); 204 | view_result.getItems().set(j,view_result.getItems().get(j+1)); 205 | view_result.getItems().set(j+1,Temp); 206 | } 207 | } 208 | } 209 | } 210 | // Field 211 | private void FieldsListener(){ 212 | field_target.textProperty().addListener((observable, oldValue, newValue) -> Platform.runLater(() -> { 213 | if(!field_target.getText().isEmpty()&&!field_dicPath.getText().isEmpty()){ 214 | bean.setTargetURL(field_target.getText()); 215 | PROTOCOL = CB_Protocol.getValue(); 216 | field_preview.setText(PROTOCOL + bean.getTargetURL()+bean.getDirectoryText().get(1)); 217 | } 218 | })); 219 | 220 | field_preview.textProperty().addListener((observable, oldValue, newValue) -> Platform.runLater(() -> { 221 | if(!field_preview.getText().isEmpty()){ 222 | BT_start.setDisable(false); 223 | } 224 | })); 225 | 226 | field_dicPath.textProperty().addListener((observable, oldValue, newValue) -> Platform.runLater(() -> { 227 | if(!field_target.getText().isEmpty()&&!field_dicPath.getText().isEmpty()){ 228 | bean.setTargetURL(field_target.getText()); 229 | PROTOCOL = CB_Protocol.getValue(); 230 | field_preview.setText(PROTOCOL + bean.getTargetURL()+bean.getDirectoryText().get(1)); 231 | } 232 | })); 233 | } 234 | // Anime 235 | private void paneCheckAnime(AnchorPane set,AnchorPane noset){ 236 | Timeline timeLine = new Timeline(); 237 | 238 | KeyValue kv_S_Start = new KeyValue(noset.translateXProperty(), 0); 239 | KeyFrame kf_S_Start = new KeyFrame(Duration.seconds(0), "Start", event -> noset.setVisible(false),kv_S_Start); 240 | 241 | KeyValue kv_S_Stop = new KeyValue(noset.translateXProperty(), -680); 242 | KeyFrame kf_S_Stop = new KeyFrame(Duration.seconds(0.3), "Stop", event -> { },kv_S_Stop); 243 | 244 | KeyValue kv_N_Start = new KeyValue(set.translateXProperty(), 680); 245 | KeyFrame kf_N_Start = new KeyFrame(Duration.seconds(0), "Start", event -> set.setVisible(true),kv_N_Start); 246 | 247 | KeyValue kv_N_Stop = new KeyValue(set.translateXProperty(), 0); 248 | KeyFrame kf_N_Stop = new KeyFrame(Duration.seconds(0.3), "Stop", event -> { },kv_N_Stop); 249 | 250 | timeLine.getKeyFrames().addAll(kf_S_Start,kf_S_Stop,kf_N_Start,kf_N_Stop); 251 | timeLine.play(); 252 | } 253 | // CheckBox 254 | private void CheckBoxListCreate(){ 255 | allCheckBoxList.add(check_200_box); 256 | allCheckBoxList.add(check_301_box); 257 | allCheckBoxList.add(check_302_box); 258 | allCheckBoxList.add(check_303_box); 259 | allCheckBoxList.add(check_401_box); 260 | allCheckBoxList.add(check_403_box); 261 | allCheckBoxList.add(check_404_box); 262 | allCheckBoxList.add(check_1XX_box); 263 | allCheckBoxList.add(check_2XX_box); 264 | allCheckBoxList.add(check_3XX_box); 265 | allCheckBoxList.add(check_4XX_box); 266 | allCheckBoxList.add(check_5XX_box); 267 | allCheckBoxList.add(check_ALL_box); 268 | } 269 | 270 | private ObservableList CheckBoxCheck(){ 271 | ObservableList result = FXCollections.observableArrayList(); 272 | for (JFXCheckBox TempCB:allCheckBoxList) { 273 | if(TempCB.isSelected()){ 274 | result.add(TempCB.getText()); 275 | } 276 | TempCB.getText(); 277 | } 278 | // for (String a:result) { System.out.println(a); } 279 | return result; 280 | } 281 | // ComboBox 282 | private void initCB_filter(){ 283 | bean.setCheckStstusCode(CheckBoxCheck()); 284 | ObservableList Checking = FXCollections.observableArrayList(); 285 | Checking.addAll("ALL"); 286 | for (String a:bean.getCheckStstusCode()) { 287 | if(!a.equals("ALL")){ 288 | Checking.addAll(a); 289 | } 290 | } 291 | CB_filter.setItems(Checking); 292 | CB_filter.getSelectionModel().select(0); 293 | } 294 | 295 | private void initCB_CB_Protocol(){ 296 | ObservableList Protocol = FXCollections.observableArrayList(); 297 | Protocol.add("http://"); 298 | Protocol.add("https://"); 299 | CB_Protocol.setItems(Protocol); 300 | CB_Protocol.getSelectionModel().select(0); 301 | } 302 | 303 | @FXML private void SelectCB_filter(){ 304 | // System.out.println(CB_filter.getValue()); 305 | 306 | ObservableList SelectedList = FXCollections.observableArrayList(); 307 | 308 | if(!CB_filter.getValue().equals("ALL")&&!CB_filter.getValue().contains("X")){ 309 | SelectedList.clear(); 310 | for (String a:ResultList) { 311 | if(CB_filter.getValue().equals(a.substring(0,3))){ 312 | SelectedList.add(a); 313 | } 314 | } 315 | view_result.setItems(SelectedList); 316 | }else if (!CB_filter.getValue().equals("ALL")&&CB_filter.getValue().contains("X")){ 317 | SelectedList.clear(); 318 | for (String a:ResultList) { 319 | if(CB_filter.getValue().replace("X","").equals(a.substring(0,1))){ 320 | SelectedList.add(a); 321 | } 322 | } 323 | view_result.setItems(SelectedList); 324 | }else { 325 | view_result.setItems(ResultList); 326 | } 327 | } 328 | // OnScan 329 | private void DirectoryScan(){ 330 | Executor exec = Executors.newFixedThreadPool(bean.getThreadCount(), runnable -> { 331 | Thread t = Executors.defaultThreadFactory().newThread(runnable); 332 | t.setDaemon(true); 333 | return t ; 334 | }); 335 | 336 | for (int Times = 0; Times <= bean.getDirectoryLineCountNum(); Times++) { 337 | int frequency = Times; 338 | Task task = new Task() { 339 | @Override 340 | public String call() { 341 | // in real life, do real work here... 342 | String Result = null; 343 | try{ 344 | Result = DirectoryScanner(frequency); 345 | ProgressSet(); 346 | if(SCAN_CONTER>=bean.getDirectoryLineCountNum()) 347 | { 348 | DirectoryScanEnd(); 349 | } 350 | }catch(Exception e){ 351 | ProgressSet(); 352 | if(SCAN_CONTER>=bean.getDirectoryLineCountNum()) 353 | { 354 | DirectoryScanEnd(); 355 | } 356 | } 357 | return Result; 358 | } 359 | }; 360 | task.setOnSucceeded(e -> ResultSet(task.getValue())); 361 | exec.execute(task); 362 | } 363 | } 364 | 365 | private void ResultSet(String Result){ 366 | if(Result!=null){ 367 | synchronized(this) { 368 | ResultList.add(Result); 369 | } 370 | } 371 | } 372 | 373 | private void DirectoryScanEnd(){ 374 | BT_start.setDisable(false); 375 | spinner.setVisible(false); 376 | field_state.setVisible(true); 377 | progressBar.lookup(".bar").setStyle("-fx-background-color: #26e283;"); 378 | CB_filter.setDisable(false); 379 | } 380 | 381 | private void ProgressSet(){ 382 | PortCountAdd(); 383 | 384 | spinner.setProgress((double)SCAN_CONTER/bean.getDirectoryLineCountNum()); 385 | progressBar.setProgress((double)SCAN_CONTER/bean.getDirectoryLineCountNum()); 386 | } 387 | 388 | private void PortCountAdd(){ 389 | synchronized(this) { 390 | SCAN_CONTER++; 391 | } 392 | } 393 | 394 | private String DirectoryScanner(int frequency){ 395 | String ResultNumber = directoryScanimpl.ResponseNumGet(PROTOCOL + bean.getTargetURL()+bean.getDirectoryText().get(frequency),bean.getDelay()); 396 | String Result; 397 | for (String a : bean.getCheckStstusCode()) { 398 | if (a.equals(ResultNumber)) { 399 | Result = ResultNumber+" "+bean.getDirectoryText().get(frequency); 400 | return Result; 401 | }else if(a.equals(((Integer.parseInt(ResultNumber)/100)+"XX"))){ 402 | Result = ResultNumber+" "+bean.getDirectoryText().get(frequency); 403 | return Result; 404 | } 405 | } 406 | return null; 407 | } 408 | 409 | } 410 | -------------------------------------------------------------------------------- /src/main/java/View/UtilsView/PortScan/PortFast.java: -------------------------------------------------------------------------------- 1 | package View.UtilsView.PortScan; 2 | import javafx.application.Application; 3 | 4 | import javafx.scene.Group; 5 | import javafx.scene.Scene; 6 | import javafx.scene.image.Image; 7 | import javafx.scene.layout.VBox; 8 | import javafx.scene.web.WebEngine; 9 | import javafx.scene.web.WebView; 10 | import javafx.stage.Stage; 11 | 12 | public class PortFast extends Application { 13 | 14 | final String a = "\n" + 15 | "\n" + 16 | " t2\n" + 17 | " \n" + 18 | " \n" + 19 | " \n" + 20 | " \n" + 111 | " \n" + 112 | " \n" + 113 | "
\n" + 114 | " \n" + 115 | "\n" + 116 | "\n" + 117 | "\n" + 118 | "\n" + 119 | "\n" + 120 | "\n" + 121 | "\n" + 122 | "\n" + 123 | "\n" + 124 | "\n" + 125 | "\n" + 126 | "\n" + 127 | "\n" + 128 | "\n" + 129 | "\n" + 130 | "\n" + 131 | "\n" + 132 | "\n" + 133 | "\n" + 134 | "\n" + 135 | "\n" + 136 | "\n" + 137 | "\n" + 138 | "\n" + 139 | "\n" + 140 | "\n" + 141 | "\n" + 142 | "\n" + 143 | "\n" + 144 | "\n" + 145 | "\n" + 146 | "\n" + 147 | "\n" + 148 | "\n" + 149 | "\n" + 150 | "\n" + 151 | "\n" + 152 | "\n" + 153 | "\n" + 154 | "\n" + 155 | "\n" + 156 | "\n" + 157 | "\n" + 158 | "\n" + 159 | "\n" + 160 | "\n" + 161 | "\n" + 162 | "\n" + 163 | "\n" + 164 | "\n" + 165 | "\n" + 166 | "\n" + 167 | "\n" + 168 | "\n" + 169 | "\n" + 170 | "\n" + 171 | "\n" + 172 | "\n" + 173 | "\n" + 174 | "\n" + 175 | "\n" + 176 | "\n" + 177 | "\n" + 178 | "\n" + 179 | "\n" + 180 | "\n" + 181 | "\n" + 182 | "\n" + 183 | "\n" + 184 | "\n" + 185 | "\n" + 186 | "\n" + 187 | "\n" + 188 | "\n" + 189 | "\n" + 190 | "\n" + 191 | "\n" + 192 | "\n" + 193 | "\n" + 194 | "\n" + 195 | "\n" + 196 | "\n" + 197 | "\n" + 198 | "\n" + 199 | "\n" + 200 | "\n" + 201 | "\n" + 202 | "\n" + 203 | "\n" + 204 | "\n" + 205 | "\n" + 206 | "\n" + 207 | "\n" + 208 | "\n" + 209 | "\n" + 210 | "\n" + 211 | "\n" + 212 | "\n" + 213 | "\n" + 214 | "\n" + 215 | "\n" + 216 | "\n" + 217 | "\n" + 218 | "\n" + 219 | "\n" + 220 | "\n" + 221 | "\n" + 222 | "\n" + 223 | "\n" + 224 | "\n" + 225 | "\n" + 226 | "\n" + 227 | "\n" + 228 | "\n" + 229 | "\n" + 230 | "\n" + 231 | "\n" + 232 | "\n" + 233 | "\n" + 234 | "\n" + 235 | "\n" + 236 | "\n" + 237 | "\n" + 238 | "\n" + 239 | "\n" + 240 | "\n" + 241 | "\n" + 242 | "\n" + 243 | "\n" + 244 | "\n" + 245 | "\n" + 246 | "\n" + 247 | "\n" + 248 | "\n" + 249 | "\n" + 250 | "\n" + 251 | "\n" + 252 | "\n" + 253 | "\n" + 254 | "\n" + 255 | "\n" + 256 | "\n" + 257 | "\n" + 258 | "\n" + 259 | "\n" + 260 | "\n" + 261 | "\n" + 262 | "\n" + 263 | "\n" + 264 | "\n" + 265 | "\n" + 266 | "\n" + 267 | "\n" + 268 | "\n" + 269 | "\n" + 270 | "\n" + 271 | "\n" + 272 | "\n" + 273 | "\n" + 274 | "\n" + 275 | "\n" + 276 | "\n" + 277 | "\n" + 278 | "\n" + 279 | "\n" + 280 | "\n" + 281 | "\n" + 282 | "\n" + 283 | "\n" + 284 | "\n" + 285 | "\n" + 286 | "\n" + 287 | "\n" + 288 | "\n" + 289 | "\n" + 290 | "\n" + 291 | "\n" + 292 | "\n" + 293 | "\n" + 294 | "\n" + 295 | "\n" + 296 | "\n" + 297 | "\n" + 298 | "\n" + 299 | "\n" + 300 | "\n" + 301 | "\n" + 302 | "\n" + 303 | "\n" + 304 | "\n" + 305 | "\n" + 306 | "\n" + 307 | "\n" + 308 | "\n" + 309 | "\n" + 310 | "\n" + 311 | "\n" + 312 | "\n" + 313 | "\n" + 314 | "\n" + 315 | "\n" + 316 | "\n" + 317 | "\n" + 318 | "\n" + 319 | "\n" + 320 | "\n" + 321 | "\n" + 322 | "\n" + 323 | "\n" + 324 | "
端口服务入侵方式
21ftp/tftp/vsftpd文件传输协议爆破/嗅探/溢出/后门
22ssh远程连接爆破/openssh漏洞
23Telnet远程连接爆破/嗅探/弱口令
25SMTP邮件服务邮件伪造
53DNS域名解析系统域传送/劫持/缓存投毒/欺骗
67/68dhcp服务劫持/欺骗
110pop3爆破/嗅探
139Samba服务爆破/未授权访问/远程命令执行
143Imap协议爆破
161SNMP协议爆破/搜集目标内网信息
389Ldap目录访问协议注入/未授权访问/弱口令
445smbms17-010/端口溢出
512/513/514Linux Rexec服务爆破/Rlogin登陆
873Rsync服务文件上传/未授权访问
1080socket爆破
1352Lotus domino邮件服务爆破/信息泄漏
1433mssql爆破/注入/SA弱口令
1521oracle爆破/注入/TNS爆破/反弹shell
2049Nfs服务配置不当
2181zookeeper服务未授权访问
2375docker remote api未授权访问
3306mysql爆破/注入
3389Rdp远程桌面链接爆破/shift后门
4848GlassFish控制台爆破/认证绕过
5000sybase/DB2数据库爆破/注入/提权
5432postgresql爆破/注入/缓冲区溢出
5632pcanywhere服务抓密码/代码执行
5900vnc爆破/认证绕过
6379Redis数据库未授权访问/爆破
7001/7002weblogicjava反序列化/控制台弱口令
80/443http/httpsweb应用漏洞/心脏滴血
8069zabbix服务远程命令执行/注入
8161activemq弱口令/写文件
8080/8089Jboss/Tomcat/Resin破/PUT文件上传/反序列化
8083/8086influxDB未授权访问
9000fastcgi远程命令执行
9090Websphere控制台爆破/java反序列化/弱口令
9200/9300elasticsearch远程代码执行
11211memcached未授权访问
27017/27018mongodb未授权访问/爆破
\n" + 325 | "\n" + 326 | "
\n" + 327 | " "; 328 | 329 | @Override 330 | public void start(Stage primaryStage) { 331 | primaryStage.setTitle("PortFast"); 332 | primaryStage.setWidth(670); 333 | primaryStage.setHeight(800); 334 | primaryStage.setResizable(false); 335 | primaryStage.getIcons().add(new Image(PortFast.class.getResourceAsStream("/img/icon/book-2-line.png"))); 336 | VBox root = new VBox(); 337 | Scene scene = new Scene(new Group()); 338 | final WebView browser = new WebView(); 339 | final WebEngine webEngine = browser.getEngine(); 340 | 341 | browser.setPrefHeight(800); 342 | 343 | webEngine.loadContent(a); 344 | 345 | root.getChildren().addAll(browser); 346 | scene.setRoot(root); 347 | 348 | primaryStage.setScene(scene); 349 | primaryStage.show(); 350 | } 351 | } 352 | --------------------------------------------------------------------------------