Skip to content

Commit 7478db2

Browse files
committed
fix: resolve testing issue
1 parent 2a25c39 commit 7478db2

File tree

1 file changed

+82
-1
lines changed

1 file changed

+82
-1
lines changed
Lines changed: 82 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,82 @@
1-
import socketimport timeclass netbios_query: def __init__(self,name,ip_address_list): self.name = name self.ip_address_list = ip_address_list self.__populate() def __populate(self): self.boardcast_address_list = [] for ip_address in self.ip_address_list: split_items = ip_address.split('.') split_items[3] = '255' boardcast_address = '.'.join(split_items) self.boardcast_address_list.append(boardcast_address) self.port = 137 self.nqs = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.nqs.setblocking(False) self.query_data = [ b"\xa9\xfb", # Transaction ID b"\x01\x10", # Flags Query b"\x00\x01", # Question:1 b"\x00\x00", # Answer RRS b"\x00\x00", # Authority RRS b"\x00\x00", # Additional RRS b"\x20", # length of Name:32 b"NAME", # Name b"\x00", # NameNull b"\x00\x20", # Query Type:NB b"\x00\x01"] # Class self.query_data[7] = str.encode(self.__netbios_encode(self.name)) def __netbios_encode(self,src): src = src.ljust(15,"\x20") src = src.ljust(16,"\x00") names = [] for c in src: char_ord = ord(c) high_4_bits = char_ord >> 4 low_4_bits = char_ord & 0x0f names.append(high_4_bits) names.append(low_4_bits) res = "" for name in names: res += chr(0x41+name) return res def query(self): wait_count = 10 send_data = [] ret = None for bytes_ele in self.query_data: for list_ele in bytes_ele: send_data.append(list_ele) while wait_count: for boardcast_address in boardcast_address_list: try: self.nqs.sendto(bytes(send_data), (self.boardcast_address, self.port)) data_rev, ADDR = self.nqs.recvfrom(1024) except: time.sleep(1) continue if(len(data_rev) > 0): ret = boardcast_address break if ret: break else: wait_count -= 1 self.nqs.close() return ret
1+
import socket
2+
import time
3+
4+
5+
class netbios_query:
6+
def __init__(self, name, ip_address_list):
7+
self.__name = name
8+
self.__ip_address_list = ip_address_list
9+
self.__boardcast_address_list = []
10+
11+
self.__populate()
12+
13+
def __populate(self):
14+
for ip_address in self.__ip_address_list:
15+
split_items = ip_address.split('.')
16+
split_items[3] = '255'
17+
boardcast_address = '.'.join(split_items)
18+
self.__boardcast_address_list.append(boardcast_address)
19+
20+
self.__port = 137
21+
self.__nqs = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
22+
self.__nqs.setblocking(False)
23+
self.__query_data = [
24+
b"\xa9\xfb", # Transaction ID
25+
b"\x01\x10", # Flags Query
26+
b"\x00\x01", # Question:1
27+
b"\x00\x00", # Answer RRS
28+
b"\x00\x00", # Authority RRS
29+
b"\x00\x00", # Additional RRS
30+
b"\x20", # length of Name:32
31+
b"NAME", # Name
32+
b"\x00", # NameNull
33+
b"\x00\x20", # Query Type:NB
34+
b"\x00\x01"] # Class
35+
self.__query_data[7] = str.encode(self.__netbios_encode(self.__name))
36+
37+
def __netbios_encode(self, src):
38+
src = src.ljust(15, "\x20")
39+
src = src.ljust(16, "\x00")
40+
names = []
41+
for c in src:
42+
char_ord = ord(c)
43+
high_4_bits = char_ord >> 4
44+
low_4_bits = char_ord & 0x0f
45+
names.append(high_4_bits)
46+
names.append(low_4_bits)
47+
res = ""
48+
for name in names:
49+
res += chr(0x41+name)
50+
return res
51+
52+
def query(self):
53+
wait_count = 10
54+
send_data = []
55+
ret = None
56+
57+
for bytes_ele in self.__query_data:
58+
for list_ele in bytes_ele:
59+
send_data.append(list_ele)
60+
61+
while wait_count:
62+
for idx, boardcast_address in enumerate(self.__boardcast_address_list):
63+
try:
64+
self.__nqs.sendto(bytes(send_data),
65+
(boardcast_address, self.__port))
66+
time.sleep(1)
67+
data_rev, ADDR = self.__nqs.recvfrom(1024)
68+
except Exception as ex:
69+
continue
70+
71+
if len(data_rev) > 0:
72+
ret = self.__ip_address_list[idx]
73+
break
74+
75+
if ret:
76+
break
77+
else:
78+
wait_count -= 1
79+
80+
self.__nqs.close()
81+
82+
return ret

0 commit comments

Comments
 (0)