utils.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package types
  2. import (
  3. "encoding/binary"
  4. "fmt"
  5. "net"
  6. log "github.com/sirupsen/logrus"
  7. "gopkg.in/natefinch/lumberjack.v2"
  8. )
  9. func IP2Int(ip net.IP) uint32 {
  10. if len(ip) == 16 {
  11. return binary.BigEndian.Uint32(ip[12:16])
  12. }
  13. return binary.BigEndian.Uint32(ip)
  14. }
  15. func Int2ip(nn uint32) net.IP {
  16. ip := make(net.IP, 4)
  17. binary.BigEndian.PutUint32(ip, nn)
  18. return ip
  19. }
  20. //Stolen from : https://github.com/llimllib/ipaddress/
  21. // Return the final address of a net range. Convert to IPv4 if possible,
  22. // otherwise return an ipv6
  23. func LastAddress(n *net.IPNet) net.IP {
  24. ip := n.IP.To4()
  25. if ip == nil {
  26. ip = n.IP
  27. return net.IP{
  28. ip[0] | ^n.Mask[0], ip[1] | ^n.Mask[1], ip[2] | ^n.Mask[2],
  29. ip[3] | ^n.Mask[3], ip[4] | ^n.Mask[4], ip[5] | ^n.Mask[5],
  30. ip[6] | ^n.Mask[6], ip[7] | ^n.Mask[7], ip[8] | ^n.Mask[8],
  31. ip[9] | ^n.Mask[9], ip[10] | ^n.Mask[10], ip[11] | ^n.Mask[11],
  32. ip[12] | ^n.Mask[12], ip[13] | ^n.Mask[13], ip[14] | ^n.Mask[14],
  33. ip[15] | ^n.Mask[15]}
  34. }
  35. return net.IPv4(
  36. ip[0]|^n.Mask[0],
  37. ip[1]|^n.Mask[1],
  38. ip[2]|^n.Mask[2],
  39. ip[3]|^n.Mask[3])
  40. }
  41. var logMode string
  42. var logFolder string
  43. var logLevel log.Level
  44. func SetDefaultLoggerConfig(inlogMode string, inlogFolder string, inlogLevel log.Level) error {
  45. logMode = inlogMode
  46. logFolder = inlogFolder
  47. logLevel = inlogLevel
  48. /*Configure logs*/
  49. if logMode == "file" {
  50. log.SetOutput(&lumberjack.Logger{
  51. Filename: logFolder + "/crowdsec.log",
  52. MaxSize: 500, //megabytes
  53. MaxBackups: 3,
  54. MaxAge: 28, //days
  55. Compress: true, //disabled by default
  56. })
  57. log.SetFormatter(&log.TextFormatter{TimestampFormat: "02-01-2006 15:04:05", FullTimestamp: true})
  58. } else if logMode != "stdout" {
  59. return fmt.Errorf("log mode '%s' unknown", logMode)
  60. }
  61. log.SetLevel(logLevel)
  62. log.SetFormatter(&log.TextFormatter{FullTimestamp: true})
  63. if logLevel >= log.InfoLevel {
  64. log.SetFormatter(&log.TextFormatter{TimestampFormat: "02-01-2006 15:04:05", FullTimestamp: true})
  65. }
  66. if logLevel >= log.DebugLevel {
  67. log.SetReportCaller(true)
  68. }
  69. return nil
  70. }
  71. func ConfigureLogger(clog *log.Logger) error {
  72. /*Configure logs*/
  73. if logMode == "file" {
  74. clog.SetOutput(&lumberjack.Logger{
  75. Filename: logFolder + "/crowdsec.log",
  76. MaxSize: 500, //megabytes
  77. MaxBackups: 3,
  78. MaxAge: 28, //days
  79. Compress: true, //disabled by default
  80. })
  81. clog.SetFormatter(&log.TextFormatter{TimestampFormat: "02-01-2006 15:04:05", FullTimestamp: true})
  82. } else if logMode != "stdout" {
  83. return fmt.Errorf("log mode '%s' unknown", logMode)
  84. }
  85. clog.SetLevel(logLevel)
  86. clog.SetFormatter(&log.TextFormatter{FullTimestamp: true})
  87. if logLevel >= log.InfoLevel {
  88. clog.SetFormatter(&log.TextFormatter{TimestampFormat: "02-01-2006 15:04:05", FullTimestamp: true})
  89. }
  90. if logLevel >= log.DebugLevel {
  91. clog.SetReportCaller(true)
  92. }
  93. return nil
  94. }