bcmc 0.1.0.post1
a CLI-centric broadcast and multicast validation tool
License: BSD-3-Clause
Requires Python: >=3.9
Keywords: bcmc, broadcast, multicast

```text
 _
| |__   ___ _ __ ___   ___   _ __  _   _
| '_ \ / __| '_ ` _ \ / __| | '_ \| | | |
| |_) | (__| | | | | | (__ _| |_) | |_| |
|_.__/ \___|_| |_| |_|\___(_) .__/ \__, |
                            |_|    |___/
```

`bcmc` is a CLI-centric IP broadcast and multicast tool built with Python. it is a testing tool for generating and validating broadcast or multicast traffic.

`bcmc` can be run as a server to generate broadcast or multicast traffic or `bcmc` can be run as a client to receive broadcast or multicast traffic. it is a CLI-based client/server tool inspired by iperf.

`bcmc` is developed by Josh Schmelzle and Kevin L. Marshall and is released under a three-clause BSD license.

## why `bcmc`?

Existing tools such as Multicast Hammer are platform specific and may have unsupported system dependencies on modern OSes. `bcmc` aims to be a free cross-platform tool that can be used from *unix or Windows. While `bcmc` aims to function cross-platform, please note some optional features may not work on certain OSes.

## usage

`bcmc` is a client/server tool which functions similar to iperf. `bcmc` can be used to test and validate broadcast or multicast on 802.11 or 802.3 networks.

steps:

* You will need two hosts
* Place both hosts on the target test network
* Use one host to run `bcmc` in client mode (receive)
* Use the other host to run `bcmc` in server mode (transmit)

## broadcast traffic

In broadcast mode, the default behavior for `bcmc` is to send IP layer UDP packets to 255.255.255.255.

## multicast traffic

In multicast mode, the default behavior for `bcmc` is to send IP layer UDP packets to 239.0.0.2 as the multicast group address.

## modes (-s|-c)

`bcmc` can be run as client or server.

## traffic (-bc|-mc)

`bcmc` can generate broadcast or multicast IP packets.

## broadcast (-bc)

client usage:

```bash
bcmc -c -bc
```

server usage:

```bash
bcmc -s -bc
```

## multicast (-mc)

client usage:

```bash
bcmc -c -mc
```

server usage:

```bash
bcmc -s -mc
```

## discovery tip

* to understand or "try out" the behavior of `bcmc`, you can also use `bcmc` with two different terminals on the same host.
* in one terminal, run `bcmc` in client mode
* in the other, run `bcmc` in server mode
* you should see incrementing messages from `bcmc` running in server mode in the terminal running `bcmc` as client mode.

## troubleshooting

On Windows, `bcmc` server (`-s`) mode will default to the interface with the lowest metric. If you are having issues where client (`-c`) mode is not receiving messages from server (`-s`) mode, investigate the metric by running `route PRINT` from conhost (cmd.exe) or PowerShell.

## optional arguments

```bash
usage: bcmc [-s|-c] [-bc|-mc] [options]
       bcmc [-h|--help] [-v|--version]

options:
  -h, --help            show this help message and exit
  -p 2002, --port 2002  port to listen on/connect to
  -b <host>, --bind <host>
                        bind to the interface associated with provided <host> address (experimental)
  --debug               increase output for debugging purposes
  -c, --client          run in client mode
  -s, --server          run in client mode
  -bc, --broadcast      set traffic type to broadcast
  -mc, --multicast      set traffic type to multicast
  --group 239.0.0.2     multicast group address (239.0.0.2 by default)
  -i 1, --interval 1    interval to send multicast packets
  --ttl 3               set the hop restriction in network for multicast server
  --dscp 46             set the Differentiated Service Code Point value applied to packets sent in server mode
  --padding 0           number of additional null bytes per payload which is sent in server mode
  --payload 'string'    add an arbitrary payload which is sent in server mode
```