Hallo, ich verstehe diese Zeile nicht, durch das %16 denkt man
:
Code:
if(((i%16)==15) || (i == length-1)) {
for ( j = 0; j < length; j++)
wieso i%16 rest 15 oder length-1 und dann das mit der j for schleife kann das wer villt versträndlicher erklären
Hier mal der ganze Code:
simple_server.h
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include "hacking.h"
#define PORT 7790
int
main(void)
{
int sockfd, new_sockfd;
struct sockaddr_in host_addr, client_addr;
int recv_length=1, yes=1;
socklen_t sin_size;
char buffer[1024];
if((sockfd=(PF_INET, SOCK_STREAM, 0))==-1)
perror("in socket");
if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int))==-1)
perror("in setting options");
host_addr.sin_family = AF_INET;
host_addr.sin_port = htons(PORT);
host_addr.sin_addr.s_addr = 0;
memset(&(host_addr.sin_zero), '0', 8);
if(bind(sockfd, (struct sockaddr *)&host_addr, sizeof(struct sockaddr))==-1)
perror("in binding");
if(listen(sockfd, 5)==-1)
perror("in listening on socket");
while(1){
sin_size = sizeof(struct sockaddr_in);
new_sockfd = accept(sockfd, (struct sockaddr *) &client_addr, &sin_size);
if(new_sockfd == -1)
perror("accepting connection");
printf("server got connection from %s prot %d\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));
send(new_sockfd, "Hello, world!\n", 13,0);
recv_length = recv(new_sockfd,&buffer,1024,0);
while (recv_length > 0) {
printf( "RECV: %d bytes\n", recv_length );
dump(buffer, recv_length);
recv_length = recv(new_sockfd, &buffer, 1024, 0);
}
close(new_sockfd);
}
return 0;
}
hacking.h :
Code:
void dump(const unsigned char *data_buffer, const unsigned int length) {
unsigned char byte;
unsigned int i,j;
for ( i = 0; i < length; i++)
{
byte = data_buffer[i];
printf( "%02x ", data_buffer[i]);
if(((i%16)==15) || (i == length-1)) {
for ( j = 0; j < length; j++)
printf (" ");
printf( "| " );
for ( j =(i-(i%16)); j <= i; j++)
{
byte = data_buffer[j];
if((byte > 31) && (byte < 127))
printf( "%c", byte );
else
printf( "." );
}
printf( "\n" );
}
}
}