使用最新的python代码发送可用nbns协议包,获取同一局域网下其它电脑的名称
时间: 2023-02-02 16:39:20 浏览: 171
使用Python发送NBNS协议包并获取其他电脑的名称,可以使用第三方库scapy:
```
from scapy.all import *
def get_hostname(ip):
ans,unans = sr(IP(dst=ip)/UDP(sport=RandShort(),dport=137)/NBNSQueryRequest(NAME_TRN_ID=RandShort(),QUESTION_NAME='*'))
for sent,recv in ans:
if recv.haslayer(NBNSQueryResponse):
return recv[NBNSQueryResponse].RR_NAME
hostname = get_hostname("192.168.0.1")
print(hostname)
```
其中,`IP(dst=ip)`表示目标IP地址,`UDP(sport=RandShort(),dport=137)`表示使用UDP协议,端口137是NBNS协议的默认端口。`NBNSQueryRequest`是NBNS请求报文,`NAME_TRN_ID`是请求标识符,`QUESTION_NAME`是询问的主机名。最后,如果收到了NBNS响应报文,则返回`RR_NAME`字段,表示主机名。
相关问题
使用最新的python代码发送nbns协议包,获取同一局域网下其它电脑的名称
可以使用python的socket库发送NBNS协议包来获取局域网内其他计算机的名称。下面是示例代码:
```
import socket
def get_host_by_name(name):
addr = socket.gethostbyname(name)
return addr
def send_nbns_request(addr):
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.settimeout(1)
sock.sendto(b'\x82\x28\x0\x0\x0\x1\x0\x0\x0\x0\x0\x0\x20\x43\x4b\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x0\x0\x21\x0\x1', (addr, 137))
try:
data, _ = sock.recvfrom(1024)
return data[57:].split(b'\x20')[0].decode('utf-16')
except socket.timeout:
return None
for i in range(1, 256):
addr = '192.168.1.{}'.format(i)
name = send_nbns_request(addr)
if name:
print(addr, name)
```
这段代码会扫描局域网内`192.168.1.1`至`192.168.1.255`的地址,并发送NBNS请求,如果收到响应,就打印出对应的IP地址和主机名。
使用python发送nbns协议包,获取同一局域网下其它电脑的名称
可以使用Python的第三方库如socket、scapy等发送NBNS协议请求,以获取同一局域网下其他电脑的名称。下面是一个使用scapy的简单示例:
```
from scapy.all import *
def get_host_name(ip):
ans, unans = sr(IP(dst=ip)/UDP(sport=RandShort(), dport=137)/NBNSQueryRequest("WORKGROUP<00>"), verbose=0)
for sent, received in ans:
if received.haslayer(NBNSQueryResponse):
return received.getlayer(NBNSQueryResponse).NAME[:-1].decode("utf-16")
host_name = get_host_name("192.168.0.255")
print(host_name)
```
请注意,此示例仅供参考,你可能需要根据实际情况进行修改。
阅读全文