chrysocome.netChrysocome Logo

Windows network protocol binder

This is a command line tool which can show and alter protocol bindings. This is useful if you want to alter your network configuration from a script. The MS loopback adapter, vmware bridging protocol and OpenVPN TAP adapter are the sorts of things you might want to alter with this tool. You can use it on your normal ethernet adapter but being a physical adapter, it becomes difficult to automate the installation of it.

Downloads for proto family
Program Version Content Format Platform Download
proto 0.1 Binary .zip Windows
proto 0.1 Source .zip C++


proto [--list|--bind|--unbind] [options] --list [--adapter=adapter] [--protocol=protocol] [--layer=UPPER|LOWER] --bind [--adapter=adapter] --protocol=protocol [--layer=UPPER|LOWER] --unbind [--adapter=adapter] --protocol=protocol [--layer=UPPER|LOWER] adapter and protocol names may end with a % which means wildcard

Example --list

proto --list adapter=*msloop not bound to protocol=ms_netbios->ms_netbt->ms_tcpip6->ROOT\NET\0000 bound to protocol=ms_netbios->ms_netbt->ms_tcpip->ROOT\NET\0000 not bound to protocol=ms_server->ms_netbt->ms_tcpip6->ROOT\NET\0000 not bound to protocol=ms_server->ms_netbt->ms_tcpip->ROOT\NET\0000 bound to protocol=vmware_bridge->ROOT\NET\0000 not bound to protocol=ms_msclient->ms_netbt->ms_tcpip6->ROOT\NET\0000 not bound to protocol=ms_msclient->ms_netbt->ms_tcpip->ROOT\NET\0000 bound to protocol=ms_tcpip->ROOT\NET\0000 bound to protocol=ms_ndisuio->ROOT\NET\0000 bound to protocol=ms_pppoe->ROOT\NET\0000 not bound to protocol=ms_netbt->ms_tcpip6->ROOT\NET\0000 bound to protocol=ms_netbt->ms_tcpip->ROOT\NET\0000 not bound to protocol=ms_tcpip6->ROOT\NET\0000 adapter=pci\ven_14e4&dev_1677 bound to protocol=ms_netbios->ms_netbt->ms_tcpip6->PCI\VEN_14E4&DEV_1677&SUBSYS_01AE1028&REV_01\4&22443A69&0&00E5 bound to protocol=ms_netbios->ms_netbt->ms_tcpip->PCI\VEN_14E4&DEV_1677&SUBSYS_01AE1028&REV_01\4&22443A69&0&00E5 bound to protocol=ms_server->ms_netbt->ms_tcpip6->PCI\VEN_14E4&DEV_1677&SUBSYS_01AE1028&REV_01\4&22443A69&0&00E5 bound to protocol=ms_server->ms_netbt->ms_tcpip->PCI\VEN_14E4&DEV_1677&SUBSYS_01AE1028&REV_01\4&22443A69&0&00E5 bound to protocol=ms_psched->PCI\VEN_14E4&DEV_1677&SUBSYS_01AE1028&REV_01\4&22443A69&0&00E5 bound to protocol=vmware_bridge->PCI\VEN_14E4&DEV_1677&SUBSYS_01AE1028&REV_01\4&22443A69&0&00E5 bound to protocol=ms_msclient->ms_netbt->ms_tcpip6->PCI\VEN_14E4&DEV_1677&SUBSYS_01AE1028&REV_01\4&22443A69&0&00E5 bound to protocol=ms_msclient->ms_netbt->ms_tcpip->PCI\VEN_14E4&DEV_1677&SUBSYS_01AE1028&REV_01\4&22443A69&0&00E5 bound to protocol=ms_tcpip->PCI\VEN_14E4&DEV_1677&SUBSYS_01AE1028&REV_01\4&22443A69&0&00E5 bound to protocol=ms_ndisuio->PCI\VEN_14E4&DEV_1677&SUBSYS_01AE1028&REV_01\4&22443A69&0&00E5 bound to protocol=ms_pppoe->PCI\VEN_14E4&DEV_1677&SUBSYS_01AE1028&REV_01\4&22443A69&0&00E5 bound to protocol=ms_netbt->ms_tcpip6->PCI\VEN_14E4&DEV_1677&SUBSYS_01AE1028&REV_01\4&22443A69&0&00E5 bound to protocol=ms_netbt->ms_tcpip->PCI\VEN_14E4&DEV_1677&SUBSYS_01AE1028&REV_01\4&22443A69&0&00E5 bound to protocol=ms_tcpip6->PCI\VEN_14E4&DEV_1677&SUBSYS_01AE1028&REV_01\4&22443A69&0&00E5

There is a lot of information there so you can filter it with the --adapter and --protocol parameters

proto --list --adapter=*msloop

will only list the *msloop adapter.

Filtering on protocol is probably the most useful. This example shows the adapters using IPv6. Note the use of % as a wild card.

proto --list --protocol=ms_tcpip6% Windows protocol binder version 0.1 Written by John Newbigin <> adapter=*vmnetadapter8 bound to protocol=ms_tcpip6->ROOT\VMWARE\0001 adapter=*vmnetadapter1 bound to protocol=ms_tcpip6->ROOT\VMWARE\0000 adapter=*msloop not bound to protocol=ms_tcpip6->ROOT\NET\0000 adapter=*tunmp bound to protocol=ms_tcpip6->ROOT\*TUNMP\0000 adapter=pci\ven_14e4&dev_1677 bound to protocol=ms_tcpip6->PCI\VEN_14E4&DEV_1677&SUBSYS_01AE1028&REV_01\4&22443A69&0&00E5 adapter=ms_ndiswanip adapter=ms_ptiminiport adapter=ms_pppoeminiport adapter=ms_pptpminiport adapter=ms_l2tpminiport adapter=sw\{eeab7790-c514-11d1-b42b-00805fc1270e}

Altering bindings

--bind and --unbind work in the same way. You must specify a protocol to operate on but it may be a wildcard. Before you alter the bindings you should use --list and test your --adapter and --protocol values. Lets assume I want to unbind vmware_bridging from my loopback adapter

proto --list --adapter=*msloop --protocol=vmware_bridge% Windows protocol binder version 0.1 Written by John Newbigin <> adapter=*msloop bound to protocol=vmware_bridge->ROOT\NET\0000

That looks good so I can go ahead and use --unbind

proto --unbind --adapter=*msloop --protocol=vmware_bridge% proto --list --adapter=*msloop --protocol=vmware_bridge% Windows protocol binder version 0.1 Written by John Newbigin <> adapter=*msloop not bound to protocol=vmware_bridge->ROOT\NET\0000

Binding it back is the same, just use --bind.

If you want a protocol bound to all but a single adapter, first unbind it from all adapters, and then bind on a specific adapter

Configuring the protocol

You should be able to use netsh to alter settings like IP addresses and DHCP etc. You will have to check the MS docs on how to do that.

More information

More information about adding interfaces can be found in the ByteClub WIKI under Windows Networking