erasty » Пн май 19, 2025 10:21 am
aka писал(а): Вс май 18, 2025 10:48 pm
Можно. Разослать широковещательный UDP пакет, состоящий из одного байта 0x01, на порт 779. Все активные тонкие клиенты ответят. Так делает втваревый конфигуратор, когда запускается.
Чем собираешься рассылать?
Собирался рассылать скриптом на golang, по типу такого:
Код: Выделить всё
func main() {
// бродкаст
broadcastAddr, err := net.ResolveUDPAddr("udp", "192.168.1.255:779")
if err != nil {
fmt.Println("Ошибка разрешения адреса:", err)
return
}
// Создаем UDP-соединение
conn, err := net.DialUDP("udp", nil, broadcastAddr)
if err != nil {
fmt.Println("Ошибка создания соединения:", err)
return
}
defer conn.Close()
message := []byte{0x01}
_, err = conn.Write(message)
if err != nil {
fmt.Println("Ошибка отправки пакета:", err)
return
}
conn.SetReadDeadline(time.Now().Add(2 * time.Second))
buffer := make([]byte, 1024)
respondedIPs := make(map[string]struct{})
for {
n, addr, err := conn.ReadFromUDP(buffer)
if err != nil {
break
}
respondedIPs[addr.IP.String()] = struct{}{}
fmt.Printf("Ответ от %s: %s\n", addr.IP.String(), buffer[:n])
}
// Выводим список уникальных IP-адресов
fmt.Println("Уникальные IP-адреса, которые ответили:")
for ip := range respondedIPs {
fmt.Println(ip)
}
}
[quote=aka post_id=77405 time=1747597726 user_id=2]
Можно. Разослать широковещательный UDP пакет, состоящий из одного байта 0x01, на порт 779. Все активные тонкие клиенты ответят. Так делает втваревый конфигуратор, когда запускается.
Чем собираешься рассылать?
[/quote]
Собирался рассылать скриптом на golang, по типу такого:
[code]func main() {
// бродкаст
broadcastAddr, err := net.ResolveUDPAddr("udp", "192.168.1.255:779")
if err != nil {
fmt.Println("Ошибка разрешения адреса:", err)
return
}
// Создаем UDP-соединение
conn, err := net.DialUDP("udp", nil, broadcastAddr)
if err != nil {
fmt.Println("Ошибка создания соединения:", err)
return
}
defer conn.Close()
message := []byte{0x01}
_, err = conn.Write(message)
if err != nil {
fmt.Println("Ошибка отправки пакета:", err)
return
}
conn.SetReadDeadline(time.Now().Add(2 * time.Second))
buffer := make([]byte, 1024)
respondedIPs := make(map[string]struct{})
for {
n, addr, err := conn.ReadFromUDP(buffer)
if err != nil {
break
}
respondedIPs[addr.IP.String()] = struct{}{}
fmt.Printf("Ответ от %s: %s\n", addr.IP.String(), buffer[:n])
}
// Выводим список уникальных IP-адресов
fmt.Println("Уникальные IP-адреса, которые ответили:")
for ip := range respondedIPs {
fmt.Println(ip)
}
}[/code]