From bsturgill at ataman.com Mon Sep 21 18:10:51 2020 From: bsturgill at ataman.com (Brian Sturgill) Date: Mon, 21 Sep 2020 18:10:51 -0600 Subject: [NCLUG] A short subject: How to find the broadcast address in Python. Message-ID: I'm in process of making intercoms. They work by sending a stream of audio packets to a known ip port using the IP4 UDP address broadcast for the network. Anyway, I wanted to autoconfigure the broadcast address and this isn't as simple as it ought to be. However I found two nifty tricks and used them in the following code: --- import psutil import socket # Broadcast ip of the interface that is the default route. def get_broadcast_ip(): with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s: s.connect(("8.8.8.8", 80)) addr = s.getsockname()[0] ifs = psutil.net_if_addrs() for if_name in ifs: for if_a in ifs[if_name]: if if_a.address == addr: return if_a.broadcast print(get_broadcast_ip()) --- The first trick is the use of a dummy socket connected to a "real" internet address. This will cause 'getsockname' to give you the real ip address of the default routed interface. The second trick is the use of the 'psutil' package. https://github.com/giampaolo/psutil This is a package that gives you much information that you'd get from ps, ifconfig, etc. What's really interesting is that it works on Linux, MacOS, Windows and more. Anyway, it has a very convenient list of network interfaces and their corresponding addresses. So thus, the tiny function! Brian -- Happy 2020! https://drive.google.com/file/d/1Sm7BRiuGMVCA3vZDlWMyPPx-jerj-jXz/view?usp=sharing