diff --git a/main.c b/main.c index 0c70d5f..8c7c99c 100644 --- a/main.c +++ b/main.c @@ -27,8 +27,7 @@ int isinarray( int pid, int array[], int n ) void getutmp( int pid, char user[], char host_ip[], char host_ipv6[], time_t * time ) { struct utmp * utmp; - int ipv6_1; - int ipv6_2; + int ipv6; int ipv4; int x; char str[6]; @@ -42,16 +41,16 @@ void getutmp( int pid, char user[], char host_ip[], char host_ipv6[], time_t * t sprintf(host_ip, "%s", utmp->ut_host); //got ip of origin if((utmp->ut_addr_v6[1] && utmp->ut_addr_v6[2] && utmp->ut_addr_v6[3]) == 0) { - ipv4 = (utmp->ut_addr_v6[0] & 0x00000000ff000000) >> 24; - sprintf( str, "%x.", ipv4); - strcat(host_ip, str); - ipv4 = (utmp->ut_addr_v6[0] & 0x0000000000ff0000) >> 16; + ipv4 = utmp->ut_addr_v6[0] & 0x00000000000000ff; sprintf( str, "%x.", ipv4); strcat(host_ip, str); ipv4 = (utmp->ut_addr_v6[0] & 0x000000000000ff00) >> 8; sprintf( str, "%x.", ipv4); strcat(host_ip, str); - ipv4 = utmp->ut_addr_v6[0] & 0x00000000000000ff; + ipv4 = (utmp->ut_addr_v6[0] & 0x0000000000ff0000) >> 16; + sprintf( str, "%x.", ipv4); + strcat(host_ip, str); + ipv4 = (utmp->ut_addr_v6[0] & 0x00000000ff000000) >> 24; sprintf( str, "%x", ipv4); strcat(host_ip, str); @@ -59,12 +58,17 @@ void getutmp( int pid, char user[], char host_ip[], char host_ipv6[], time_t * t { for (x=0;x<4;x++) { - - ipv6_1 = (utmp->ut_addr_v6[x] & 0xffffffff00000000) >> 32; - sprintf( str, "%x:", ipv6_1); + ipv6 = utmp->ut_addr_v6[x] & 0x000000000000ffff; + sprintf( str, "%x:", ipv6); strcat(host_ipv6, str); - ipv6_2 = utmp->ut_addr_v6[x] & 0x00000000ffffffff; - sprintf( str, "%x:", ipv6_1); + ipv6 = (utmp->ut_addr_v6[x] & 0x00000000ffff0000) >> 16; + sprintf( str, "%x:", ipv6); + strcat(host_ipv6, str); + ipv6 = (utmp->ut_addr_v6[x] & 0x0000ffff00000000) >> 32; + sprintf( str, "%x:", ipv6); + strcat(host_ipv6, str); + ipv6 = (utmp->ut_addr_v6[x] & 0xffff000000000000) >> 48; + sprintf( str, "%x:", ipv6); strcat(host_ipv6, str); } host_ipv6[strlen(host_ipv6)-1] = '\0';