fire.go 1020 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package main
  2. import (
  3. "encoding/csv"
  4. "fmt"
  5. "os"
  6. "time"
  7. "github.com/crowdsecurity/crowdsec/pkg/cticlient"
  8. )
  9. func intPtr(i int) *int {
  10. return &i
  11. }
  12. func main() {
  13. client := cticlient.NewCrowdsecCTIClient(cticlient.WithAPIKey(os.Getenv("CTI_API_KEY")))
  14. paginator := cticlient.NewFirePaginator(client, cticlient.FireParams{
  15. Limit: intPtr(1000),
  16. })
  17. csvHeader := []string{
  18. "value",
  19. "reason",
  20. "type",
  21. "scope",
  22. "duration",
  23. }
  24. csvFile, err := os.Create("fire.csv")
  25. if err != nil {
  26. panic(err)
  27. }
  28. defer csvFile.Close()
  29. csvWriter := csv.NewWriter(csvFile)
  30. allItems := make([][]string, 0)
  31. for {
  32. items, err := paginator.Next()
  33. if err != nil {
  34. panic(err)
  35. }
  36. if items == nil {
  37. break
  38. }
  39. for _, item := range items {
  40. banDuration := time.Until(item.Expiration.Time)
  41. allItems = append(allItems, []string{
  42. item.Ip,
  43. "fire-import",
  44. "ban",
  45. "ip",
  46. fmt.Sprintf("%ds", int(banDuration.Seconds())),
  47. })
  48. }
  49. }
  50. csvWriter.Write(csvHeader)
  51. csvWriter.WriteAll(allItems)
  52. }