Algorithms_in_C 1.0.0
Set of algorithms implemented in C.
Loading...
Searching...
No Matches
remote_command_exec_udp_client.c File Reference

Client-side implementation of [Remote Command Execution Using UDP](https://www.imperva.com/learn/ddos/udp-user-datagram-protocol/) More...

#include <arpa/inet.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <unistd.h>
#include <errno.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
Include dependency graph for remote_command_exec_udp_client.c:

Macros

#define PORT   10000
 For the type in_addr_t and in_port_t For structures returned by the network database library - formatted internet addresses and port numbers For in_addr and sockaddr_in structures For macro definitions related to the creation of sockets For definitions to allow for the porting of BSD programs.
 

Functions

void error ()
 Utility function used to print an error message to stderr.
 
int main ()
 Main function.
 

Detailed Description

Client-side implementation of [Remote Command Execution Using UDP](https://www.imperva.com/learn/ddos/udp-user-datagram-protocol/)

Author
NVombat
See also
remote_command_exec_udp_server.c

The algorithm is based on the simple UDP client and server model. It runs an infinite loop which takes user input and sends it to the server for execution. The server receives the commands and executes them until the user exits the loop. In this way, Remote Command Execution using UDP is shown using the server-client model & socket programming

Macro Definition Documentation

◆ PORT

#define PORT   10000

For the type in_addr_t and in_port_t For structures returned by the network database library - formatted internet addresses and port numbers For in_addr and sockaddr_in structures For macro definitions related to the creation of sockets For definitions to allow for the porting of BSD programs.

To indicate what went wrong if an error occurs For specific bit size values of variables Variable types, several macros, and various functions for performing input and output Variable types, several macros, and various functions for performing general functions Various functions for manipulating arrays of characters

Function Documentation

◆ error()

void error ( )

Utility function used to print an error message to stderr.

It prints str and an implementation-defined error message corresponding to the global variable errno.

Returns
void
47{
48 perror("Socket Creation Failed");
49 exit(EXIT_FAILURE);
50}

◆ main()

int main ( void  )

Main function.

Returns
0 on exit

Variable Declarations

< socket descriptors - Like file handles but for sockets

< character arrays to read and store string data for communication

< basic structures for all syscalls and functions that deal with internet addresses. Structures for handling internet addresses

< length of socket

The UDP socket is created using the socket function.

AF_INET (Family) - it is an address family that is used to designate the type of addresses that your socket can communicate with

SOCK_DGRAM (Type) - Indicates UDP Connection - UDP does not require the source and destination to establish a three-way handshake before transmission takes place. Additionally, there is no need for an end-to-end connection

0 (Protocol) - Specifies a particular protocol to be used with the socket. Specifying a protocol of 0 causes socket() to use an unspecified default protocol appropriate for the requested socket type.

Server Address Information

The bzero() function erases the data in the n bytes of the memory starting at the location pointed to, by writing zeros (bytes containing '\0') to that area.

We bind the server_addr to the internet address and port number thus giving our socket an identity with an address and port where it can listen for connections

htons - The htons() function translates a short integer from host byte order to network byte order

htonl - The htonl() function translates a long integer from host byte order to network byte order

These functions are necessary so that the binding of address and port takes place with data in the correct format

Connects the client to the server address using the socket descriptor This enables the two to communicate and exchange data

Communication between client and server

The client sends data to the server after taking the input from the user

The client then receives a response from the server when the command has been executed

The server and client can communicate indefinitely till one of them exits the connection

The client sends the server a command which it executes thus showing remote command execution using UDP

Close Socket

57{
58 /** Variable Declarations */
59 uint32_t
60 sockfd; ///< socket descriptors - Like file handles but for sockets
61 char send_msg[1024],
62 recv_msg[1024]; ///< character arrays to read and store string data
63 /// for communication
64
65 struct sockaddr_in
66 server_addr; ///< basic structures for all syscalls and functions that
67 /// deal with internet addresses. Structures for handling
68 /// internet addresses
69 socklen_t serverLength = sizeof(server_addr); ///< length of socket
70
71 /**
72 * The UDP socket is created using the socket function.
73 *
74 * AF_INET (Family) - it is an address family that is used to designate the
75 * type of addresses that your socket can communicate with
76 *
77 * SOCK_DGRAM (Type) - Indicates UDP Connection - UDP does not require the
78 * source and destination to establish a three-way handshake before
79 * transmission takes place. Additionally, there is no need for an
80 * end-to-end connection
81 *
82 * 0 (Protocol) - Specifies a particular protocol to be used with the
83 * socket. Specifying a protocol of 0 causes socket() to use an unspecified
84 * default protocol appropriate for the requested socket type.
85 */
86 if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
87 {
88 error();
89 }
90
91 /**
92 * Server Address Information
93 *
94 * The bzero() function erases the data in the n bytes of the memory
95 * starting at the location pointed to, by writing zeros (bytes
96 * containing '\0') to that area.
97 *
98 * We bind the server_addr to the internet address and port number thus
99 * giving our socket an identity with an address and port where it can
100 * listen for connections
101 *
102 * htons - The htons() function translates a short integer from host byte
103 * order to network byte order
104 *
105 * htonl - The htonl() function translates a long integer from host byte
106 * order to network byte order
107 *
108 * These functions are necessary so that the binding of address and port
109 * takes place with data in the correct format
110 */
111 bzero(&server_addr, sizeof(server_addr));
112 server_addr.sin_family = AF_INET;
113 server_addr.sin_port = htons(PORT);
114 server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
115
116 printf("Client is running...\n");
117
118 /**
119 * Connects the client to the server address using the socket descriptor
120 * This enables the two to communicate and exchange data
121 */
122 connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr));
123
124 printf("Client is Connected Successfully...\n");
125
126 /**
127 * Communication between client and server
128 *
129 * The client sends data to the server after taking the input
130 * from the user
131 *
132 * The client then receives a response from the server when the
133 * command has been executed
134 *
135 * The server and client can communicate indefinitely till one of them
136 * exits the connection
137 *
138 * The client sends the server a command which it executes thus showing
139 * remote command execution using UDP
140 */
141 while (1)
142 {
143 printf("\nEnter Command To Be Executed Remotely: \n");
144 fgets(send_msg, sizeof(send_msg), stdin);
145 sendto(sockfd, send_msg, sizeof(send_msg), 0,
146 (struct sockaddr *)&server_addr, serverLength);
147 recvfrom(sockfd, recv_msg, sizeof(recv_msg), 0,
148 (struct sockaddr *)&server_addr, &serverLength);
149 printf("Server Reply: %s\n", recv_msg);
150 }
151
152 /// Close Socket
153 close(sockfd);
154 printf("Client is offline...\n");
155 return 0;
156}
#define PORT
For the type in_addr_t and in_port_t For structures returned by the network database library - format...
Definition remote_command_exec_udp_client.c:38
void error()
Utility function used to print an error message to stderr.
Definition remote_command_exec_udp_client.c:46
Here is the call graph for this function: