# mapCIDR | Small Utility Program To Perform Multiple Operations For A Given subnet/CIDR Ranges

**URL:** <https://onehack.st/t/mapcidr-small-utility-program-to-perform-multiple-operations-for-a-given-subnet-cidr-ranges/178787>\
**Category:** Tools & Scripts\
**Tags:** tools, hacking, freebies\
**Created:** [April 14, 2021, 9:20pm UTC](https://onehack.st/t/mapcidr-small-utility-program-to-perform-multiple-operations-for-a-given-subnet-cidr-ranges/178787 "2021-04-14T21:20:03Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![TheStrength](https://onehack.st/user_avatar/onehack.st/thestrength/32/46753_2.png) [@TheStrength](https://onehack.st/u/TheStrength)\
**Post date:** [April 14, 2021, 9:20pm UTC](https://onehack.st/t/mapcidr-small-utility-program-to-perform-multiple-operations-for-a-given-subnet-cidr-ranges/178787/1 "2021-04-14T21:20:04Z")

</div>

![image](https://onehack.st/uploads/default/original/3X/2/0/2039fb1797a238ad9e6ecc87f4c7f0a460a6b1b2.png)

Small utility program to perform multiple operations for a given subnet/CIDR ranges.

The tool was developed to ease load distribution for mass scanning operations, it can be used both as a library and as independent CLI tool.

**Features**

- Simple and modular code base making it easy to contribute.
- **CIDR distribution** for distributed scanning.
- **Stdin** and **stdout** support for integrating in workflows

**Installation:-**

**From Source**

```auto
 GO111MODULE=auto go get -u github.com/projectdiscovery/mapcidr/cmd/mapcidr

```

**From Github**

```auto
 git clone https://github.com/projectdiscovery/mapcidr.git; cd mapcidr/cmd/mapcidr; go build .; cp mapcidr /usr/local/bin

```

**Usage:-**

```auto
 mapcidr -h

```

This will display help for the tool. Here are all the switches it supports.

| Flag | Description | Example |
| --- | --- | --- |
| -cidr | Single CIDR to process | mapcidr -cidr 173.0.84.0/24 |
| -sbc | Slice by CIDR count | mapcidr -sbc 10 |
| -sbh | Slice by HOST count | mapcidr -sbh 10000 |
| -l | File containing list of CIDRs | mapcidr -l cidr.txt |
| -o | File to write output to (optional) | mapcidr -o output.txt |
| -silent | Make the output silent | mapcidr -silent |
| -version | Print current version of chaos client | mapcidr -version |

**Running mapCIDR**

In order to get list of IPs for a give CIDR, use the following command.

```auto
 mapcidr -cidr 173.0.84.0/24 echo 173.0.84.0/24 | mapcidr

```

```auto
                   _______________  ______  ____/___ / _/ _ / _ / ' / _ '/ _ / / ___/ // // / , _/ /_/_/_/_,_/ .__ / ___/___ / ____ /_/|_| v0.1 /_/ projectdiscovery.io[WRN] Use with caution. You are responsible for your actions[WRN] Developers assume no liability and are not responsible for any misuse or damage.173.0.84.0173.0.84.1173.0.84.2173.0.84.3173.0.84.4173.0.84.5173.0.84.13173.0.84.14173.0.84.15173.0.84.16

```

**Slice by CIDR**

In order to slice given CIDR or list of CIDR by CIDR count or slice into multiple and equal smaller subnets, use the following command.

```auto
 mapcidr -cidr 173.0.84.0/24 -sbc 10 -silent echo 173.0.84.0/24 | mapcidr -sbc 10 -silent

```

```auto
173.0.84.0/27173.0.84.32/27173.0.84.64/27173.0.84.96/27173.0.84.128/27173.0.84.160/27173.0.84.208/28173.0.84.192/28173.0.84.240/28173.0.84.224/28

```

**Slice by HOST**

In order to slice given CIDR for equal number of host count in each CIDR, use the following command.

```auto
 mapcidr -cidr 173.0.84.0/16 -sbh 20000 -silent echo 173.0.84.0/16 | mapcidr -sbh 20000 -silent

```

```auto
173.0.0.0/18173.0.64.0/18173.0.128.0/18173.0.192.0/18

```

Note: it’s possible to obtain a perfect split only when the desired amount of slices or hosts per subnet is a powers of two. Otherwise the tool will attempt to automatically find the best split strategy to obtain the desired outcome.

**Use mapCIDR as a library**

It’s possible to use the library directly in your go programs. The following code snippets outline how to divide a cidr into subnets, and how to divide the same into subnets containing a certain number of hosts

```auto
package mainimport (	"fmt"	"github.com/projectdiscovery/mapcidr")func main() {	// Divide the CIDR into two subnets	subnets1 := mapcidr.SplitN("192.168.1.0/24", 2)	for _, subnet := range subnets1 { fmt.Println(subnet)	}	// Divide the CIDR into two subnets containing 128 hosts each	subnets2 := mapcidr.SplitByNumber("192.168.1.0/24", 128)	for _, subnet := range subnets2 { fmt.Println(subnet)	}	// List all ips in the CIDR	ips, _ := mapcidr.Ips("192.168.1.0/24")	for _, ip := range ips { fmt.Println(ip)	}}

```

mapCDIR is made with  by the [projectdiscovery](https://projectdiscovery.io/) team.

## GitHub:

> **[GitHub - projectdiscovery/mapcidr: Utility program to perform multiple operations for...](https://github.com/projectdiscovery/mapcidr)**
>
> Utility program to perform multiple operations for a given subnet/CIDR ranges.
