#include #include #include #include #include #include #define SRC_PORT 12000 void stream_socket() { printf("\n=== STREAM SOCKET (TCP) ===\n"); int sock = socket(AF_INET, SOCK_STREAM, 0); if (sock < 0) { perror("socket"); return; } struct sockaddr_in src = {0}; src.sin_family = AF_INET; src.sin_addr.s_addr = inet_addr("127.0.0.1"); src.sin_port = htons(SRC_PORT); if (bind(sock, (struct sockaddr*)&src, sizeof(src)) < 0) { perror("bind"); close(sock); return; } struct sockaddr_in server = {0}; server.sin_family = AF_INET; server.sin_port = htons(12001); inet_pton(AF_INET, "127.0.0.1", &server.sin_addr); printf("[*] Connecting to 127.0.0.1:12001...\n"); if (connect(sock, (struct sockaddr*)&server, sizeof(server)) == 0) { printf("[+] Connected successfully!\n"); const char *msg = "привет никифор"; send(sock, msg, strlen(msg), 0); char buf[256] = {0}; recv(sock, buf, sizeof(buf) - 1, 0); printf("[Response]:\n%s\n", buf); } else { perror("connect"); } close(sock); } void datagram_socket() { printf("\n=== DATAGRAM SOCKET (UDP) ===\n"); int sock = socket(AF_INET, SOCK_DGRAM, 0); if (sock < 0) { perror("socket"); return; } struct sockaddr_in src = {0}; src.sin_family = AF_INET; src.sin_addr.s_addr = inet_addr("127.0.0.1"); src.sin_port = htons(SRC_PORT); if (bind(sock, (struct sockaddr*)&src, sizeof(src)) < 0) { perror("bind"); close(sock); return; } struct sockaddr_in dest = {0}; dest.sin_family = AF_INET; dest.sin_port = htons(12002); inet_pton(AF_INET, "127.0.0.1", &dest.sin_addr); const char *msg = "ялквмом!"; printf("[*] Sending UDP datagram to 127.0.0.1:12002...\n"); sendto(sock, msg, strlen(msg), 0, (struct sockaddr*)&dest, sizeof(dest)); printf("[+] Datagram sent, waiting for response...\n"); char buf[256]; socklen_t addrlen = sizeof(dest); while (1) { ssize_t n = recvfrom(sock, buf, sizeof(buf) - 1, 0, (struct sockaddr*)&dest, &addrlen); if (n > 0) { buf[n] = '\0'; printf("[Response]: \n%s\n", buf); break; } else { sleep(0.1); } } close(sock); } void raw_socket() { printf("\n=== RAW SOCKET (ICMP) ===\n"); int sock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP); if (sock < 0) { perror("socket"); return; } struct sockaddr_in dest = {0}; dest.sin_family = AF_INET; inet_pton(AF_INET, "8.8.8.8", &dest.sin_addr); struct icmphdr icmp_hdr = {0}; icmp_hdr.type = ICMP_ECHO; icmp_hdr.code = 0; icmp_hdr.checksum = 0xFFFF; printf("[*] Sending ICMP echo request to 8.8.8.8...\n"); ssize_t sent = sendto(sock, &icmp_hdr, sizeof(icmp_hdr), 0, (struct sockaddr*)&dest, sizeof(dest)); if (sent > 0) printf("[+] ICMP packet sent\n"); else perror("sendto"); close(sock); } int main() { stream_socket(); sleep(1); datagram_socket(); sleep(1); raw_socket(); return 0; }