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;
};
};
|