Projects STRLCPY shodanidb Commits d33c6f75
🤬
  • ■ ■ ■ ■ ■ ■
    README.md
    skipped 22 lines
    23 23   -nv Hide vulnerabilities
    24 24   -nocolor Disable color in output
    25 25   -json Save output to JSON format
     26 + -v Verbose mode
    26 27   
    27 28   
    28 29  Examples:
    skipped 1 lines
    30 31   echo [ip] | shodanidb -nt
    31 32   cat ips.txt | shodanidb -nh
    32 33   cat ips.txt | shodanidb -json output.json
     34 + cat 8.8.8.0/24 | shodanidb
    33 35  ```
    34 36   
    35 37   
    skipped 4 lines
  • ■ ■ ■ ■ ■ ■
    go.mod
    skipped 3 lines
    4 4   
    5 5  require (
    6 6   github.com/logrusorgru/aurora v2.0.3+incompatible
     7 + github.com/projectdiscovery/blackrock v0.0.0-20210415162320-b38689ae3a2e // indirect
     8 + github.com/projectdiscovery/iputil v0.0.0-20210804143329-3a30fcde43f3 // indirect
     9 + github.com/projectdiscovery/mapcidr v0.0.7 // indirect
    7 10  )
    8 11   
  • ■ ■ ■ ■ ■ ■
    go.sum
     1 +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
     2 +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
     3 +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
     4 +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
     5 +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
     6 +github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
     7 +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
     8 +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
     9 +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
     10 +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
     11 +github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
     12 +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
     13 +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
     14 +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
     15 +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
     16 +github.com/logrusorgru/aurora v0.0.0-20200102142835-e9ef32dff381/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4=
    1 17  github.com/logrusorgru/aurora v2.0.3+incompatible h1:tOpm7WcpBTn4fjmVfgpQq0EfczGlG91VSDkswnjF5A8=
    2 18  github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4=
     19 +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
     20 +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
     21 +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
     22 +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
     23 +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
     24 +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
     25 +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
     26 +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
     27 +github.com/projectdiscovery/blackrock v0.0.0-20210415162320-b38689ae3a2e h1:7bwaFH1jvtOo5ndhTQgoA349ozhX+1dc4b6tbaPnBOA=
     28 +github.com/projectdiscovery/blackrock v0.0.0-20210415162320-b38689ae3a2e/go.mod h1:/IsapnEYiWG+yEDPXp0e8NWj3npzB9Ccy9lXEUJwMZs=
     29 +github.com/projectdiscovery/gologger v1.0.1/go.mod h1:Ok+axMqK53bWNwDSU1nTNwITLYMXMdZtRc8/y1c7sWE=
     30 +github.com/projectdiscovery/gologger v1.1.4/go.mod h1:Bhb6Bdx2PV1nMaFLoXNBmHIU85iROS9y1tBuv7T5pMY=
     31 +github.com/projectdiscovery/hmap v0.0.1/go.mod h1:VDEfgzkKQdq7iGTKz8Ooul0NuYHQ8qiDs6r8bPD1Sb0=
     32 +github.com/projectdiscovery/ipranger v0.0.2/go.mod h1:kcAIk/lo5rW+IzUrFkeYyXnFJ+dKwYooEOHGVPP/RWE=
     33 +github.com/projectdiscovery/iputil v0.0.0-20210804143329-3a30fcde43f3 h1:VZ9H51A7tI7R/9I5W5l960Nkq7eMJqGd3y1wsuwzdjE=
     34 +github.com/projectdiscovery/iputil v0.0.0-20210804143329-3a30fcde43f3/go.mod h1:blmYJkS8lSrrx3QcmcgS2tZIxlojeVmoGeA9twslCBU=
     35 +github.com/projectdiscovery/mapcidr v0.0.4/go.mod h1:ALOIj6ptkWujNoX8RdQwB2mZ+kAmKuLJBq9T5gR5wG0=
     36 +github.com/projectdiscovery/mapcidr v0.0.7 h1:WK6WFimbWjUxfvcHEgofYNqIyqQh0vTDKzbmTh53aVg=
     37 +github.com/projectdiscovery/mapcidr v0.0.7/go.mod h1:7CzdUdjuLVI0s33dQ33lWgjg3vPuLFw2rQzZ0RxkT00=
     38 +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
     39 +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
     40 +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
     41 +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
     42 +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
     43 +github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
     44 +github.com/yl2chen/cidranger v1.0.2/go.mod h1:9U1yz7WPYDwf0vpNWFaeRh0bjwz5RVgRy/9UEQfHl0g=
     45 +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
     46 +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
     47 +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
     48 +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
     49 +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
     50 +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
     51 +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
     52 +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
     53 +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
     54 +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
     55 +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
     56 +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
    3 57   
  • ■ ■ ■ ■ ■
    shodanidb.go
    skipped 12 lines
    13 13   "sync"
    14 14   
    15 15   "github.com/logrusorgru/aurora"
     16 + "github.com/projectdiscovery/iputil"
     17 + "github.com/projectdiscovery/mapcidr"
    16 18  )
    17 19   
    18 20  type Response struct {
    skipped 25 lines
    44 46   var jsonFile string
    45 47   flag.StringVar(&jsonFile, "json", "", "Save output to JSON format")
    46 48   
     49 + var verbose bool
     50 + flag.BoolVar(&verbose, "v", false, "Verbose")
     51 + 
    47 52   flag.Parse()
    48 53   
    49 54   
    50  - var ips []string
     55 + var inputs, targets []string
    51 56   
    52 57   if flag.NArg() > 0 {
    53  - ips = []string{flag.Arg(0)}
     58 + inputs = []string{flag.Arg(0)}
    54 59   } else {
    55 60   sc := bufio.NewScanner(os.Stdin)
    56 61   for sc.Scan() {
    57  - ips = append(ips, sc.Text())
     62 + inputs = append(inputs, sc.Text())
    58 63   }
    59 64   if err := sc.Err(); err != nil {
    60 65   fmt.Fprintf(os.Stderr, "failed to read input: %s\n", err)
    61 66   }
    62 67   }
    63 68   
     69 + targets = loadTargets(inputs, verbose)
     70 + 
    64 71   channel := make(chan Response)
    65 72   var wg sync.WaitGroup
    66 73   
    67  - for i := 0; i < len(ips); i++ {
     74 + for i := 0; i < len(targets); i++ {
    68 75   wg.Add(1)
    69 76   
    70 77   i := i
    71 78   
    72 79   go func() {
    73 80   defer wg.Done()
    74  - jsonData := getData(ips[i])
     81 + jsonData := getData(targets[i], verbose)
    75 82   channel <- jsonData
    76 83   }()
    77 84   
    skipped 9 lines
    87 94   return
    88 95   }
    89 96   
    90  - for i := 0; i < len(ips); i++ {
     97 + for i := 0; i < len(targets); i++ {
    91 98   printResult(<-channel, noCPEs, noHostnames, noTags, noVulns, noColor)
    92 99   }
    93 100  }
    94 101   
    95 102   
    96  -func getData(ip string) Response {
     103 +func loadTargets(inputs []string, verbose bool) []string {
     104 + 
     105 + var targets []string
     106 + 
     107 + for _, target := range inputs {
     108 + if iputil.IsCIDR(target) {
     109 + cidrIps, err := mapcidr.IPAddresses(target)
     110 + if err != nil {
     111 + if verbose {
     112 + log.Printf("Couldn't parse CIDR!\n")
     113 + }
     114 + return []string{}
     115 + }
     116 + for _, ip := range cidrIps {
     117 + targets = append(targets, ip)
     118 + }
     119 + } else {
     120 + targets = append(targets, target)
     121 + }
     122 + }
     123 + 
     124 + return targets
     125 +}
     126 + 
     127 + 
     128 +func getData(ip string, verbose bool) Response {
    97 129   
    98 130   res, err := http.Get(
    99 131   fmt.Sprintf("https://internetdb.shodan.io/%s", ip),
    100 132   )
    101 133   
    102 134   if err != nil {
    103  - log.Fatalf("Couldn't connect to the server!")
     135 + if verbose {
     136 + log.Printf("Couldn't connect to the server! (%s)", ip)
     137 + log.Printf("%s\n", err)
     138 + }
    104 139   return Response{}
    105 140   }
    106 141   
    107 142   raw, err := ioutil.ReadAll(res.Body)
    108 143   if err != nil {
    109  - log.Fatalf("Couldn't read the data!")
     144 + if verbose {
     145 + log.Printf("Couldn't read the data from %s", ip)
     146 + log.Printf("%s\n", raw)
     147 + }
    110 148   return Response{}
    111 149   }
    112 150   
    skipped 3 lines
    116 154   err = json.Unmarshal(raw, &jsonData)
    117 155   
    118 156   if err != nil {
    119  - log.Fatalf("The data is incorrect!")
     157 + if verbose {
     158 + log.Printf("The data from %s is incorrect!", ip)
     159 + log.Printf("%s\n", raw)
     160 + }
    120 161   return Response{}
    121 162   }
    122 163   
    skipped 76 lines
Please wait...
Page is in error, reload to recover