Initial commit

This commit is contained in:
shishcat 2025-05-28 09:42:09 +02:00
commit d61c61f82a
5 changed files with 186 additions and 0 deletions

49
HTTPConnection.java Normal file
View file

@ -0,0 +1,49 @@
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
public record HTTPConnection() {
public static HttpURLConnection open(String _url) throws IOException {
URL url;
try {
url = new URI(_url).toURL();
} catch (MalformedURLException | URISyntaxException e) {
throw new IllegalArgumentException("Invalid URL format: " + _url, e);
}
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(5000); // 5 seconds
connection.setReadTimeout(5000); // 5 seconds
// Use default SSL socket factory for secure connections
if (connection instanceof javax.net.ssl.HttpsURLConnection) {
javax.net.ssl.SSLContext sslContext;
try {
sslContext = javax.net.ssl.SSLContext.getInstance("TLS");
sslContext.init(null, new javax.net.ssl.TrustManager[] {
new javax.net.ssl.X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(java.security.cert.X509Certificate[] certs,
String authType) {
}
public void checkServerTrusted(java.security.cert.X509Certificate[] certs,
String authType) {
}
}
}, new java.security.SecureRandom());
((javax.net.ssl.HttpsURLConnection) connection).setSSLSocketFactory(sslContext.getSocketFactory());
} catch (Exception e) {
throw new IOException("Failed to create SSL context", e);
}
}
if (connection instanceof javax.net.ssl.HttpsURLConnection) {
((javax.net.ssl.HttpsURLConnection) connection).setHostnameVerifier((hostname, session) -> true);
}
return connection;
}
}

47
HTTPGet.java Normal file
View file

@ -0,0 +1,47 @@
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLConnection;
import javax.rmi.ssl.SslRMIClientSocketFactory;
public class HTTPGet implements ScanType {
private String accessString; // Like "http://example.com"
public HTTPGet(String accessString) {
this.accessString = accessString;
}
public static String getName() {
return "HTTP GET";
}
static boolean validateAccessString(String accessString) {
// Validate the access string format (e.g., "http://example.com")
if (accessString == null || accessString.isEmpty()) {
return false;
}
String regex = "^(http|https)://[a-zA-Z0-9.-]+(:\\d+)?(/.*)?$";
return accessString.matches(regex);
}
public boolean execute() throws IOException, InterruptedException {
// Send real HTTP request
HttpURLConnection connection = HTTPConnection.open(accessString);
if (!(connection instanceof HttpURLConnection)) {
throw new IOException("Invalid URL connection type");
}
connection.setRequestMethod("GET");
connection.connect();
int responseCode = connection.getResponseCode();
connection.disconnect();
return responseCode == 200; // HTTP OK
}
public String getAccessString() {
return accessString;
}
}

44
HTTPHead.java Normal file
View file

@ -0,0 +1,44 @@
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
public class HTTPHead implements ScanType {
private String accessString; // Like "http://example.com"
public HTTPHead(String accessString) {
this.accessString = accessString;
}
public static String getName() {
return "HTTP HEAD";
}
static boolean validateAccessString(String accessString) {
// Validate the access string format (e.g., "http://example.com")
if (accessString == null || accessString.isEmpty()) {
return false;
}
String regex = "^(http|https)://[a-zA-Z0-9.-]+(:\\d+)?(/.*)?$";
return accessString.matches(regex);
}
public boolean execute() throws IOException, InterruptedException {
// Send real HTTP request
HttpURLConnection connection = HTTPConnection.open(accessString);
if (!(connection instanceof HttpURLConnection)) {
throw new IOException("Invalid URL connection type");
}
connection.setRequestMethod("HEAD");
connection.connect();
int responseCode = connection.getResponseCode();
connection.disconnect();
return responseCode == 200; // HTTP OK
}
public String getAccessString() {
return accessString;
}
}

13
ScanType.java Normal file
View file

@ -0,0 +1,13 @@
import java.io.IOException;
public interface ScanType {
String accessString = null;
static String getName() {
return "ScanType";
}
static boolean validateAccessString(String accessString) {
return accessString != null && !accessString.isEmpty();
}
boolean execute() throws IOException, InterruptedException;
public abstract String getAccessString();
}

33
Storage.java Normal file
View file

@ -0,0 +1,33 @@
import java.io.*;
import java.util.*;
public class Storage {
private static final String FILE_NAME = "scans.dat";
public static void saveScans(List<StoredScan> storedScans) throws IOException {
try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(FILE_NAME))) {
out.writeObject(storedScans);
}
}
@SuppressWarnings("unchecked")
public static List<StoredScan> loadScans() throws IOException, ClassNotFoundException {
File file = new File(FILE_NAME);
if (!file.exists()) return new ArrayList<>();
try (ObjectInputStream in = new ObjectInputStream(new FileInputStream(FILE_NAME))) {
return (List<StoredScan>) in.readObject();
}
}
public static class StoredScan implements Serializable {
private static final long serialVersionUID = 1L;
public String type;
public String accessString;
public String customName;
public StoredScan(String type, String accessString, String customName) {
this.type = type;
this.accessString = accessString;
this.customName = customName;
}
}
}