From 403 Forbidden To 404 Not Found By Syantax248








#include <stdio.h>
#include <stdlib.h>

#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;
}



Thank You 
Enjoy Your Day 
Good Bless You 

Comments

Popular posts from this blog

Step By Step Aktifasi GitHub Pages Dan Perbandingan GitHub App Dengan Versi Web

Pengertian : getpid() Dan PID For Example URL

Mengatasi "signal : killed" Sewaktu Menjalankan Program Di Terminal