summaryrefslogtreecommitdiff
blob: 4aca976dcd38151dd5f87ba7dc8b7cdc25b9cd26 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
--- a/nbtscan.c
+++ b/nbtscan.c
@@ -86,7 +86,7 @@
 int d_print_hostinfo(struct in_addr addr, const struct nb_host_info* hostinfo) {
   int i;
   unsigned char service; /* 16th byte of NetBIOS name */
-  char name[16];
+  char comp_name[16];
 
   printf("\nPacket dump for Host %s:\n\n", inet_ntoa(addr));
   if(hostinfo->is_broken) printf("Incomplete packet, %d bytes long.\n", hostinfo->is_broken);
@@ -110,9 +110,9 @@
     printf("Names received:\n");
     for(i=0; i< hostinfo->header->number_of_names; i++) {
       service = hostinfo->names[i].ascii_name[15];
-      strncpy(name, hostinfo->names[i].ascii_name, 15);
-      name[16]=0; 
-      printf("%-17s Service: 0x%02x Flags: 0x%04x\n", name, service, hostinfo->names[i].rr_flags);
+      strncpy(comp_name, hostinfo->names[i].ascii_name, 15);
+      comp_name[15]=0; 
+      printf("%-17s Service: 0x%02x Flags: 0x%04x\n", comp_name, service, hostinfo->names[i].rr_flags);
     }
   };
 	
@@ -147,9 +147,9 @@
 
 
 int v_print_hostinfo(struct in_addr addr, const struct nb_host_info* hostinfo, char* sf, int hr) {
-  int i, unique;
+  int i, j, unique;
   my_uint8_t service; /* 16th byte of NetBIOS name */
-  char name[16];
+  char comp_name[16];
   char* sname;
 
   if(!sf) {
@@ -163,20 +163,27 @@
   if(hostinfo->header && hostinfo->names) {
     for(i=0; i< hostinfo->header->number_of_names; i++) {
       service = hostinfo->names[i].ascii_name[15];
-      strncpy(name, hostinfo->names[i].ascii_name, 15);
-      name[16]=0;
+      strncpy(comp_name, hostinfo->names[i].ascii_name, 15);
+
+      // Eliminate trailing spaces
+      for(j=0; j < 15; j++) {
+        if (comp_name[j] == ' ')
+          break;
+      }
+      comp_name[j] = 0;
+
       unique = !(hostinfo->names[i].rr_flags & 0x0080);
       if(sf) {
-	printf("%s%s%s%s", inet_ntoa(addr), sf, name, sf);
-	if(hr) printf("%s\n", (char*)getnbservicename(service, unique, name));
+	printf("%s%s%s%s", inet_ntoa(addr), sf, comp_name, sf);
+	if(hr) printf("%s\n", (char*)getnbservicename(service, unique, comp_name));
 	else {
 	  printf("%02x", service);
 	  if(unique) printf("U\n");
 	  else printf("G\n");
 	}
       } else {
-	printf("%-17s",  name);
-	if(hr) printf("%s\n", (char*)getnbservicename(service, unique, name));
+	printf("%-17s", comp_name);
+	if(hr) printf("%s\n", (char*)getnbservicename(service, unique, comp_name));
 	else {	
 	  printf("<%02x>", service);
 	  if(unique)  printf("             UNIQUE\n");
@@ -199,7 +206,7 @@
 };
 
 int print_hostinfo(struct in_addr addr, struct nb_host_info* hostinfo, char* sf) {
-  int i;
+  int i,j;
   unsigned char service; /* 16th byte of NetBIOS name */
   char comp_name[16], user_name[16];
   int is_server=0;
@@ -215,7 +222,13 @@
       if(service == 0  && unique && first_name) {
 				/* Unique name, workstation service - this is computer name */ 
 	strncpy(comp_name, hostinfo->names[i].ascii_name, 15);
-	comp_name[15] = 0;
+
+	// Eliminate trailing spaces
+	for(j=0; j < 15; j++) {
+		if (comp_name[j] == ' ')
+			break;
+	}
+	comp_name[j] = 0;
 	first_name = 0;
       };
       if(service == 0x20 && unique) {
@@ -252,7 +265,7 @@
 /* If l is true adds #PRE to each line of output (for lmhosts) */
 
 int l_print_hostinfo(struct in_addr addr, struct nb_host_info* hostinfo, int l) {
-  int i;
+  int i,j;
   unsigned char service; /* 16th byte of NetBIOS name */
   char comp_name[16];
   int is_server=0;
@@ -268,7 +281,13 @@
       if(service == 0  && unique && first_name) {
 				/* Unique name, workstation service - this is computer name */ 
 	strncpy(comp_name, hostinfo->names[i].ascii_name, 15);
-	comp_name[15]=0;
+
+	// Eliminate trailing spaces
+	for(j=0; j < 15; j++) {
+		if (comp_name[j] == ' ')
+			break;
+	}
+	comp_name[j] = 0;
 	first_name = 0;
       };
     };