From 403 Forbidden To 404 Not Found By Syantax248
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <openssl/ssl.h>
#include <openssl/err.h>
#define PORT 80
#define HTTPS_PORT 443
int main() {
int server_fd, client_fd;
struct sockaddr_in server_addr, client_addr;
socklen_t client_len = sizeof(client_addr);
char url[256];
int port;
char protokol[10];
printf("Masukkan URL: ");
fgets(url, sizeof(url), stdin);
url[strcspn(url, "\n")] = 0;
printf("Masukkan Port (80/443): ");
scanf("%d", &port);
getchar(); // untuk menghilangkan newline character
printf("Masukkan Protokol (HTTP/HTTPS): ");
fgets(protokol, sizeof(protokol), stdin);
protokol[strcspn(protokol, "\n")] = 0;
// Buat socket
if (strcmp(protokol, "HTTP") == 0) {
server_fd = socket(AF_INET, SOCK_STREAM, 0);
if (server_fd < 0) {
perror("socket");
exit(1);
}
// Set alamat server
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
inet_pton(AF_INET, url, &server_addr.sin_addr);
// Bind socket ke alamat server
if (bind(server_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
perror("bind");
exit(1);
}
// Listen untuk koneksi masuk
if (listen(server_fd, 3) < 0) {
perror("listen");
exit(1);
}
printf("Server berjalan di: http:
printf("//%s\n", url);
printf("Port: %d\n", PORT);
printf("Protokol: %s\n", protokol);
} else if (strcmp(protokol, "HTTPS") == 0) {
SSL_library_init();
SSL_load_error_strings();
ERR_load_BIO_strings();
OpenSSL_add_all_algorithms();
SSL_CTX *ctx = SSL_CTX_new(TLS_server_method());
if (ctx == NULL) {
ERR_print_errors_fp(stderr);
exit(1);
}
server_fd = socket(AF_INET, SOCK_STREAM, 0);
if (server_fd < 0) {
perror("// Buat socket
server_fd = socket(AF_INET, SOCK_STREAM, 0);
if (server_fd < 0) {
perror("socket");
exit(1);
}
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(HTTPS_PORT);
inet_pton(AF_INET, url, &server_addr.sin_addr);
if (bind(server_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
perror("// Set alamat server
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(HTTPS_PORT);
inet_pton(AF_INET, url, &server_addr.sin_addr);
// Bind socket ke alamat server
if (bind(server_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
perror("bind");
exit(1);
}
if (listen(server_fd, 3) < 0) {
perror("// Listen untuk koneksi masuk
if (listen(server_fd, 3) < 0) {
perror("listen");
exit(1);
}
printf("Server berjalan di: https://%s\n", url);
printf("Port: %d\n", HTTPS_PORT);
printf("Protokol: %s\n", protokol);
// Terima koneksi dari client
client_fd = accept(server_fd, (struct sockaddr *)&client_addr, &client_len);
if (client_fd < 0) {
perror("accept");
exit(1);
}
SSL *ssl = SSL_new(ctx);
SSL_set_fd(ssl, client_fd);
if (SSL_accept(ssl) <= 0) {
ERR_print_errors_fp(stderr);
exit(1);
}
// Baca request dari client
char request[1024];
SSL_read(ssl, request, 1024);
// Periksa status respons
if (strstr(request, "403") != NULL) {
// Beralih ke halaman 404 dengan redirect permanen
char *response = "HTTP/1.1 301 Moved Permanently\r\nLocation: /404\r\n\r\n";
SSL_write(ssl, response, strlen(response));
} else {
// Kirim respons ke client
char *response = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\nHalaman ditemukan";
SSL_write(ssl, response, strlen(response));
}
// Tutup koneksi
SSL_shutdown(ssl);
SSL_free(ssl);
close(client_fd);
}
return 0;
}

Comments
Post a Comment