mirror of
https://github.com/tobychui/zoraxy.git
synced 2025-08-07 05:38:30 +02:00
Updated v3.0.9
- Added certificate download - Updated netcup timeout value - Updated geoip db - Removed debug print from log viewer - Upgraded netstat log printing to new log formatter - Improved updater implementation
This commit is contained in:
@@ -3,8 +3,6 @@ package netstat
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"os/exec"
|
||||
@@ -14,6 +12,7 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"imuslab.com/zoraxy/mod/info/logger"
|
||||
"imuslab.com/zoraxy/mod/utils"
|
||||
)
|
||||
|
||||
@@ -35,10 +34,11 @@ type NetStatBuffers struct {
|
||||
Stats []*FlowStat //Statistic of the flow
|
||||
StopChan chan bool //Channel to stop the ticker
|
||||
EventTicker *time.Ticker //Ticker for event logging
|
||||
logger *logger.Logger
|
||||
}
|
||||
|
||||
// Get a new network statistic buffers
|
||||
func NewNetStatBuffer(recordCount int) (*NetStatBuffers, error) {
|
||||
func NewNetStatBuffer(recordCount int, systemWideLogger *logger.Logger) (*NetStatBuffers, error) {
|
||||
//Flood fill the stats with 0
|
||||
initialStats := []*FlowStat{}
|
||||
for i := 0; i < recordCount; i++ {
|
||||
@@ -65,21 +65,22 @@ func NewNetStatBuffer(recordCount int) (*NetStatBuffers, error) {
|
||||
Stats: initialStats,
|
||||
StopChan: stopCh,
|
||||
EventTicker: ticker,
|
||||
logger: systemWideLogger,
|
||||
}
|
||||
|
||||
//Get the initial measurements of netstats
|
||||
rx, tx, err := GetNetworkInterfaceStats()
|
||||
rx, tx, err := thisNetBuffer.GetNetworkInterfaceStats()
|
||||
if err != nil {
|
||||
log.Println("Unable to get NIC stats: ", err.Error())
|
||||
systemWideLogger.PrintAndLog("netstat", "Unable to get NIC stats: ", err)
|
||||
}
|
||||
|
||||
retryCount := 0
|
||||
for rx == 0 && tx == 0 && retryCount < 10 {
|
||||
//Strange. Retry
|
||||
log.Println("NIC stats return all 0. Retrying...")
|
||||
rx, tx, err = GetNetworkInterfaceStats()
|
||||
systemWideLogger.PrintAndLog("netstat", "NIC stats return all 0. Retrying...", nil)
|
||||
rx, tx, err = thisNetBuffer.GetNetworkInterfaceStats()
|
||||
if err != nil {
|
||||
log.Println("Unable to get NIC stats: ", err.Error())
|
||||
systemWideLogger.PrintAndLog("netstat", "Unable to get NIC stats: ", err)
|
||||
}
|
||||
retryCount++
|
||||
}
|
||||
@@ -94,20 +95,20 @@ func NewNetStatBuffer(recordCount int) (*NetStatBuffers, error) {
|
||||
for {
|
||||
select {
|
||||
case <-n.StopChan:
|
||||
fmt.Println("- Netstats listener stopped")
|
||||
systemWideLogger.PrintAndLog("netstat", "Netstats listener stopped", nil)
|
||||
return
|
||||
|
||||
case <-ticker.C:
|
||||
if n.PreviousStat.RX == 0 && n.PreviousStat.TX == 0 {
|
||||
//Initiation state is still not done. Ignore request
|
||||
log.Println("No initial states. Waiting")
|
||||
systemWideLogger.PrintAndLog("netstat", "No initial states. Waiting", nil)
|
||||
return
|
||||
}
|
||||
// Get the latest network interface stats
|
||||
rx, tx, err := GetNetworkInterfaceStats()
|
||||
rx, tx, err := thisNetBuffer.GetNetworkInterfaceStats()
|
||||
if err != nil {
|
||||
// Log the error, but don't stop the buffer
|
||||
log.Printf("Failed to get network interface stats: %v", err)
|
||||
systemWideLogger.PrintAndLog("netstat", "Failed to get network interface stats", err)
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -173,8 +174,8 @@ func (n *NetStatBuffers) Close() {
|
||||
n.EventTicker.Stop()
|
||||
}
|
||||
|
||||
func HandleGetNetworkInterfaceStats(w http.ResponseWriter, r *http.Request) {
|
||||
rx, tx, err := GetNetworkInterfaceStats()
|
||||
func (n *NetStatBuffers) HandleGetNetworkInterfaceStats(w http.ResponseWriter, r *http.Request) {
|
||||
rx, tx, err := n.GetNetworkInterfaceStats()
|
||||
if err != nil {
|
||||
utils.SendErrorResponse(w, err.Error())
|
||||
return
|
||||
@@ -193,7 +194,7 @@ func HandleGetNetworkInterfaceStats(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
// Get network interface stats, return accumulated rx bits, tx bits and error if any
|
||||
func GetNetworkInterfaceStats() (int64, int64, error) {
|
||||
func (n *NetStatBuffers) GetNetworkInterfaceStats() (int64, int64, error) {
|
||||
if runtime.GOOS == "windows" {
|
||||
//Windows wmic sometime freeze and not respond.
|
||||
//The safer way is to make a bypass mechanism
|
||||
@@ -262,7 +263,7 @@ func GetNetworkInterfaceStats() (int64, int64, error) {
|
||||
result = <-callbackChan
|
||||
cmd = nil
|
||||
if result.Err != nil {
|
||||
log.Println("Unable to extract NIC info from wmic: " + result.Err.Error())
|
||||
n.logger.PrintAndLog("netstat", "Unable to extract NIC info from wmic", result.Err)
|
||||
}
|
||||
return result.RX, result.TX, result.Err
|
||||
} else if runtime.GOOS == "linux" {
|
||||
|
Reference in New Issue
Block a user