Initial commit
This commit is contained in:
commit
8f0d00ac94
15
README.md
Normal file
15
README.md
Normal file
@ -0,0 +1,15 @@
|
||||
# org2ranges
|
||||
Collect IP ranges with a [bgp.tools](https://bgp.tools) search query.
|
||||
|
||||
Searches [bgp.tools](https://bgp.tools) for organizations IP ranges and creates three files:
|
||||
- `ranges.txt`: Contains all IP ranges belonging to the ASNs.
|
||||
- `ipv4.txt`: All IPv4 ranges for `zmap` or other IPv4-only tools.
|
||||
- `ipv6.txt`: All IPv6 ranges that can be scanned separately if needed.
|
||||
|
||||
As the organization search is loose, you will be asked to edit the input list before `asn2ranges` is called.
|
||||
|
||||
## Shoutouts
|
||||
- Greetz to acidvegas for `asn2ranges` and `asn2search` bash functions.
|
||||
|
||||
## Troubleshooting
|
||||
You may have to edit the User-Agent if you have trouble getting the lists from [bgp.tools](https://bgp.tools).
|
107
org2ranges.sh
Normal file
107
org2ranges.sh
Normal file
@ -0,0 +1,107 @@
|
||||
#!/bin/bash
|
||||
|
||||
# org2ranges.sh
|
||||
#
|
||||
# written by agatha with bgp.tools scripts provided by acidvegas
|
||||
#
|
||||
# usage: ./org2ranges.sh <search query>
|
||||
# searches bgp.tools for organizations ip ranges and creates three files:
|
||||
# - ranges.txt: contains all ip ranges belonging to the asns
|
||||
# - ipv4.txt: all ipv4 ranges for zmap or other ipv4-only tools
|
||||
# - ipv6.txt: all ipv6 ranges that can be scanned separately if needed
|
||||
#
|
||||
# as the organization search is loose, you will be asked to edit the input
|
||||
# list before asn2ranges is called.
|
||||
|
||||
asn2ranges() {
|
||||
local cache_file="/tmp/.bgp_tools_table_cache"
|
||||
local current_time=$(date +%s)
|
||||
local update_interval=$((24 * 60 * 60)) # 2 hours in seconds
|
||||
if [ -f "$cache_file" ]; then
|
||||
local last_update=$(date -r "$cache_file" +%s)
|
||||
local time_diff=$(($current_time - $last_update))
|
||||
if [ $time_diff -gt $update_interval ]; then
|
||||
curl -A 'bgp.tools cli - originally by acidvegas' -s https://bgp.tools/table.txt -o "$cache_file"
|
||||
fi
|
||||
else
|
||||
curl -A 'bgp.tools cli - originally by acidvegas' -s https://bgp.tools/table.txt -o "$cache_file"
|
||||
fi
|
||||
awk -v asn="$1" '$NF == asn {print $1}' "$cache_file"
|
||||
}
|
||||
|
||||
asn2search() {
|
||||
local search_string="$1"
|
||||
local cache_file="/tmp/.bgp_tools_asn_cache"
|
||||
local current_time=$(date +%s)
|
||||
local update_interval=$((24 * 60 * 60)) # 24 hours in seconds
|
||||
if [ -f "$cache_file" ]; then
|
||||
local last_update=$(date -r "$cache_file" +%s)
|
||||
local time_diff=$(($current_time - $last_update))
|
||||
if [ $time_diff -gt $update_interval ]; then
|
||||
curl -v -A 'bgp.tools cli - originally by acidvegas' -s https://bgp.tools/asns.csv -o "$cache_file"
|
||||
fi
|
||||
else
|
||||
curl -A 'bgp.tools cli - originally by acidvegas' -s https://bgp.tools/asns.csv -o "$cache_file"
|
||||
fi
|
||||
grep -i "$search_string" "$cache_file"
|
||||
}
|
||||
|
||||
# org2ranges main
|
||||
if [[ -z "$1" ]]; then
|
||||
echo "[!] No organization provided."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
search_string="$*"
|
||||
|
||||
echo "[*] Searching for \"$search_string\"..."
|
||||
as_list=$(asn2search "$search_string")
|
||||
|
||||
if [[ -n "$as_list" ]]; then
|
||||
echo "[+] ASNs found for \"$search_string\". Validate the list before continuing."
|
||||
read -rp "[*] Press Enter to continue."
|
||||
|
||||
temp_file=$(mktemp)
|
||||
printf "%s\n" "$as_list" > "$temp_file"
|
||||
|
||||
"${EDITOR:-vim}" "$temp_file"
|
||||
|
||||
if ! [[ -s "$temp_file" ]]; then
|
||||
echo "[!] Could not find temp_file."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
num_asns=$(wc -l "$temp_file" | awk '{print $1}')
|
||||
echo "[*] Gathering IP ranges for $num_asns ASNs..."
|
||||
|
||||
ranges_file="ranges.txt"
|
||||
|
||||
# Delete ranges_file if it already exists
|
||||
if [[ -f "$ranges_file" ]]; then
|
||||
rm "$ranges_file"
|
||||
fi
|
||||
|
||||
while IFS= read -r line; do
|
||||
as_number=$(echo "$line" | grep -oP '\bAS\d+\b' | sed 's/^AS//')
|
||||
|
||||
if [[ -n $as_number ]]; then
|
||||
asn2ranges "$as_number" >> "$ranges_file"
|
||||
fi
|
||||
done < "$temp_file"
|
||||
|
||||
grep -v ":" "$ranges_file" > ipv4.txt
|
||||
grep ":" "$ranges_file" > ipv6.txt
|
||||
|
||||
echo "[+] Created ranges.txt, ipv4.txt, and ipv6.txt!"
|
||||
|
||||
num_v4=$(wc -l ipv4.txt | awk '{print $1}')
|
||||
num_v6=$(wc -l ipv6.txt | awk '{print $1}')
|
||||
echo "[+] IPv4 range count: $num_v4"
|
||||
echo "[+] IPv6 range count: $num_v6"
|
||||
echo "[*] Happy hunting!"
|
||||
|
||||
rm "$temp_file"
|
||||
else
|
||||
echo "[!] No ASNs found."
|
||||
fi
|
||||
|
Loading…
Reference in New Issue
Block a user