From d8cd40a2c0c6a49c07413dbcf32befcdb792fc23 Mon Sep 17 00:00:00 2001 From: joerg kost Date: Thu, 14 Feb 2019 17:10:27 +0100 Subject: [PATCH] - added some custom parameter option - moved subdirectories --- Dockerfile.release | 11 --- src/Makefile => Makefile | 0 src/asn_test.go => asn_test.go | 2 +- src/main.go => main.go | 81 ++++++++++--------- .../numberRange.go | 0 saveFIB.txt | 52 ++++++++++++ {src/scripts => scripts}/cross_compile.sh | 0 7 files changed, 98 insertions(+), 48 deletions(-) delete mode 100644 Dockerfile.release rename src/Makefile => Makefile (100%) rename src/asn_test.go => asn_test.go (98%) rename src/main.go => main.go (66%) rename {src/numberRange => numberRange}/numberRange.go (100%) create mode 100644 saveFIB.txt rename {src/scripts => scripts}/cross_compile.sh (100%) diff --git a/Dockerfile.release b/Dockerfile.release deleted file mode 100644 index d2065bb..0000000 --- a/Dockerfile.release +++ /dev/null @@ -1,11 +0,0 @@ -FROM alpine:latest -RUN apk update -RUN apk --no-cache upgrade -RUN apk --no-cache add unzip ca-certificates openssl -WORKDIR /asnbuilder -RUN wget https://github.com/ipcjk/asnbuilder/releases/download/0.1/release.tar.gz -RUN tar xfz release.tar.gz --strip 1 -RUN rm release.tar.gz -RUN chmod 0755 /mlxsh/asnbuilder -RUN chown root:root -R /asnbuilder -MAINTAINER Joerg Kost diff --git a/src/Makefile b/Makefile similarity index 100% rename from src/Makefile rename to Makefile diff --git a/src/asn_test.go b/asn_test.go similarity index 98% rename from src/asn_test.go rename to asn_test.go index 329e452..8834211 100644 --- a/src/asn_test.go +++ b/asn_test.go @@ -1,4 +1,4 @@ -package main +package asnbuilder import ( numberRange "./numberRange" diff --git a/src/main.go b/main.go similarity index 66% rename from src/main.go rename to main.go index bbd3458..037812c 100644 --- a/src/main.go +++ b/main.go @@ -4,33 +4,31 @@ * */ -package main +package asnbuilder import ( + "./numberRange" "encoding/csv" "flag" "fmt" "io" "log" "net/http" + "os" + "sort" "strconv" "strings" "sync" - "sort" - "./numberRange" - "os" ) var NicToASN map[string][]string -var fmt_asPathACL = "ip as-path access-list %s %s %s$\n" +var fmtAsPathACL = "ip as-path access-list %s %s %s$\n" /* Command line parameters */ -var flagNicRegion string var flagPermitOrDeny int -var flagAclTitle string +var flagAclTitle, flagFilename, flagNicRegion, asnFile string var flagSummaryOnly bool var flagNICsParsed []string -var flagFilename string var PermitOrDenyArr [2]string = [2]string{"deny", "permit"} var asnList []string = []string{ @@ -44,31 +42,43 @@ func init() { flag.BoolVar(&flagSummaryOnly, "summary", false, "Print summary of downloaded lists only") flag.IntVar(&flagPermitOrDeny, "permitOrDeny", 1, "Deny = 0, Permit = 1") flag.StringVar(&flagFilename, "filename", "", "Output file, else stdout") + flag.StringVar(&asnFile, "custom", "", "file with custom ASNs for list-generation") + flag.Parse() flagNICsParsed = strings.Split(flagNicRegion, ",") } func main() { - // log.Println("Building ASN-prefixlists per NIC") var wg sync.WaitGroup var mt sync.Mutex - for _, v := range asnList { - wg.Add(1) - go func(asnURI string) { - defer wg.Done() - // log.Printf("downloading %s\n", asnURI) + if asnFile != "" { + f, err := os.Open(asnFile) + if err != nil { + log.Fatalf("Cant open as number file %s: %s", asnFile, err) + } + mapAsnToNic(f) + defer f.Close() + } + + if asnFile == "" { + for _, v := range asnList { + wg.Add(1) + go func(asnURI string) { + defer wg.Done() + // log.Printf("downloading %s\n", asnURI) - resp, err := http.Get(asnURI) - if err != nil { - log.Fatal("Cant open as numbers from IANA") - } + resp, err := http.Get(asnURI) + if err != nil { + log.Fatal("Cant open as numbers from IANA") + } - mt.Lock() - map_asn_to_nic(resp.Body) - mt.Unlock() - resp.Body.Close() - }(v) + mt.Lock() + mapAsnToNic(resp.Body) + mt.Unlock() + resp.Body.Close() + }(v) + } } wg.Wait() @@ -94,7 +104,7 @@ func printSummary() { } } -func generatePrefixList(outputStream io.Writer ) { +func generatePrefixList(outputStream io.Writer) { var prefixLists []string for _, nic := range flagNICsParsed { for _, v := range NicToASN[nic] { @@ -109,28 +119,28 @@ func generatePrefixList(outputStream io.Writer ) { panic(err) } if start == end { - prefixLists = append(prefixLists, fmt.Sprintf(fmt_asPathACL, flagAclTitle, PermitOrDenyArr[flagPermitOrDeny], - "_" + strconv.Itoa(start))) + prefixLists = append(prefixLists, fmt.Sprintf(fmtAsPathACL, flagAclTitle, PermitOrDenyArr[flagPermitOrDeny], + "_"+strconv.Itoa(start))) } else { - prefixLists = append(prefixLists, fmt.Sprintf(fmt_asPathACL, flagAclTitle, PermitOrDenyArr[flagPermitOrDeny], + prefixLists = append(prefixLists, fmt.Sprintf(fmtAsPathACL, flagAclTitle, PermitOrDenyArr[flagPermitOrDeny], numberRange.GetRegex(start, end))) } } else { - prefixLists = append(prefixLists, fmt.Sprintf(fmt_asPathACL, flagAclTitle, PermitOrDenyArr[flagPermitOrDeny], "_" + v)) + prefixLists = append(prefixLists, fmt.Sprintf(fmtAsPathACL, flagAclTitle, PermitOrDenyArr[flagPermitOrDeny], "_"+v)) } } } sort.Slice(prefixLists, - func(i,j int) bool { + func(i, j int) bool { return prefixLists[i] < prefixLists[j] - }); + }) for _, v := range prefixLists { fmt.Fprint(outputStream, v) } } -func map_asn_to_nic(ASN io.ReadCloser) { +func mapAsnToNic(ASN io.ReadCloser) { r := csv.NewReader(ASN) for { record, err := r.Read() @@ -138,7 +148,7 @@ func map_asn_to_nic(ASN io.ReadCloser) { break } if err != nil { - log.Fatal(err) + log.Fatal( err) } if strings.HasPrefix(record[1], "Assigned by ") { @@ -146,9 +156,8 @@ func map_asn_to_nic(ASN io.ReadCloser) { NicToASN[nic] = append(NicToASN[nic], record[0]) } else if strings.HasPrefix(record[1], "Reserved") || strings.HasPrefix(record[1], "Unallocated") { NicToASN["bogons"] = append(NicToASN["bogons"], record[0]) - } + } else { + NicToASN["custom"] = append(NicToASN["custom"], record[0]) + } } } - - - diff --git a/src/numberRange/numberRange.go b/numberRange/numberRange.go similarity index 100% rename from src/numberRange/numberRange.go rename to numberRange/numberRange.go diff --git a/saveFIB.txt b/saveFIB.txt new file mode 100644 index 0000000..b43ee58 --- /dev/null +++ b/saveFIB.txt @@ -0,0 +1,52 @@ +8151,Uninet S.A. de C.V., MX +39891,ALJAWWALSTC-AS, SA +6327,SHAW - Shaw Communications Inc., CA +8551,BEZEQ-INTERNATIONAL-AS Bezeqint Internet Backbone, IL +47331,TTNET, TR +4538,ERX-CERNET-BKB China Education and Research Network Center, CN +9808,CMNET-GD Guangdong Mobile Communication Co.Ltd., CN +9394,CTTNET China TieTong Telecommunications Corporation, CN +7552,VIETEL-AS-AP Viettel Group, VN +7545,TPG-INTERNET-AP TPG Telecom Limited, AU +45899,VNPT-AS-VN VNPT Corp, VN +4766,KIXS-AS-KR Korea Telecom, KR +17974,TELKOMNET-AS2-AP PT Telekomunikasi Indonesia, ID +11492,CABLEONE - CABLE ONE INC., US +18566,MEGAPATH5-US - MegaPath Corporation, US +4755,TATACOMM-AS TATA Communications formerly VSNL is Leading ISP, IN +9498,BBIL-AP BHARTI Airtel Ltd., IN +20115,CHARTER-20115 - Charter Communications, US +11830,Instituto Costarricense de Electricidad y Telecom., CR +23969,TOT-NET TOT Public Company Limited, TH +12389,ROSTELECOM-AS, RU +6389,BELLSOUTH-NET-BLK - AT&T Corp., US +45090,CNNIC-TENCENT-NET-AP Shenzhen Tencent Computer Systems Company Limited, CN +9121,TTNET, TR +12479,UNI2-AS, ES +22773,ASN-CXA-ALL-CCI-22773-RDC - Cox Communications Inc., US +28573,CLARO S.A., BR +11172,Alestra S. de R.L. de C.V., MX +32098,TRANSTELCO-INC - Transtelco Inc, US +33363,BHN-33363 - Charter Communications Inc, US +45609,BHARTI-MOBILITY-AS-AP Bharti Airtel Ltd. AS for GPRS Service, IN +30036,MEDIACOM-ENTERPRISE-BUSINESS - Mediacom Communications Corp, US +45271,ICLNET-AS-AP Idea Cellular Limited, IN +13361,VODAFONE-AS-AP Vodafone Australia Pty Ltd, AU +9829,BSNL-NIB National Internet Backbone, IN +3462,HINET Data Communication Business Group, TW +9605,DOCOMO NTT DOCOMO INC., JP +13206,REALMOVE-AS-AP Realmove Company Limited, TH +55430,STARHUB-NGNBN Starhub Ltd, SG +24173,NETNAM-AS-AP Netnam Company, VN +13142,MOBIFONE-AS-VN MOBIFONE Corporation, VN +17622,CNCGROUP-GZ China Unicom Guangzhou network, CN +21003,PINKU-DAIMARI Pinku Daimari | CHD-IX, GB +4808,CHINA169-BJ China Unicom Beijing Province Network, CN +54540,INCERO-HVVC - HIVELOCITY Inc., US +3651,SPRINT-BB6 - Sprint, US +10507,SPCS - Sprint Personal Communications Systems, US +17552,TRUE-AS-AP True Internet Co. Ltd., TH +210035,PINKU-DAIMA45609RI Pinku Daimari | CHD-IX, GB +10143,EXETEL-AS-AP Exetel Pty Ltd, AU +17072,TOTAL PLAY TELECOMUNICACIONES SA DE CV, MX +48503,TELE2-KZ Tele2 Kazakhstan, KZ \ No newline at end of file diff --git a/src/scripts/cross_compile.sh b/scripts/cross_compile.sh similarity index 100% rename from src/scripts/cross_compile.sh rename to scripts/cross_compile.sh