mirror of
				https://github.com/TeaOSLab/EdgeAPI.git
				synced 2025-11-04 07:50:25 +08:00 
			
		
		
		
	IP检查也支持范围搜索
This commit is contained in:
		@@ -13,7 +13,6 @@ import (
 | 
				
			|||||||
	"github.com/iwind/TeaGo/dbs"
 | 
						"github.com/iwind/TeaGo/dbs"
 | 
				
			||||||
	"github.com/iwind/TeaGo/lists"
 | 
						"github.com/iwind/TeaGo/lists"
 | 
				
			||||||
	"github.com/iwind/TeaGo/types"
 | 
						"github.com/iwind/TeaGo/types"
 | 
				
			||||||
	"math"
 | 
					 | 
				
			||||||
	"net"
 | 
						"net"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -264,14 +263,6 @@ func (this *IPItemDAO) CreateIPItem(tx *dbs.Tx,
 | 
				
			|||||||
	op.IpFrom = ipFrom
 | 
						op.IpFrom = ipFrom
 | 
				
			||||||
	op.IpTo = ipTo
 | 
						op.IpTo = ipTo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// TODO 支持IPv6
 | 
					 | 
				
			||||||
	if iputils.IsIPv4(ipFrom) {
 | 
					 | 
				
			||||||
		op.IpFromLong = iputils.ToLong(ipFrom)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if iputils.IsIPv4(ipTo) {
 | 
					 | 
				
			||||||
		op.IpToLong = iputils.ToLong(ipTo)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	op.Reason = reason
 | 
						op.Reason = reason
 | 
				
			||||||
	op.Type = itemType
 | 
						op.Type = itemType
 | 
				
			||||||
	op.EventLevel = eventLevel
 | 
						op.EventLevel = eventLevel
 | 
				
			||||||
@@ -353,14 +344,6 @@ func (this *IPItemDAO) UpdateIPItem(tx *dbs.Tx, itemId int64, ipFrom string, ipT
 | 
				
			|||||||
	op.IpFrom = ipFrom
 | 
						op.IpFrom = ipFrom
 | 
				
			||||||
	op.IpTo = ipTo
 | 
						op.IpTo = ipTo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// TODO 支持IPv6
 | 
					 | 
				
			||||||
	if iputils.IsIPv4(ipFrom) {
 | 
					 | 
				
			||||||
		op.IpFromLong = iputils.ToLong(ipFrom)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if iputils.IsIPv4(ipTo) {
 | 
					 | 
				
			||||||
		op.IpToLong = iputils.ToLong(ipTo)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	op.Reason = reason
 | 
						op.Reason = reason
 | 
				
			||||||
	op.Type = itemType
 | 
						op.Type = itemType
 | 
				
			||||||
	op.EventLevel = eventLevel
 | 
						op.EventLevel = eventLevel
 | 
				
			||||||
@@ -457,16 +440,21 @@ func (this *IPItemDAO) FindItemListId(tx *dbs.Tx, itemId int64) (int64, error) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// FindEnabledItemContainsIP 查找包含某个IP的Item
 | 
					// FindEnabledItemContainsIP 查找包含某个IP的Item
 | 
				
			||||||
func (this *IPItemDAO) FindEnabledItemContainsIP(tx *dbs.Tx, listId int64, ip uint64) (*IPItem, error) {
 | 
					func (this *IPItemDAO) FindEnabledItemContainsIP(tx *dbs.Tx, listId int64, ip string) (*IPItem, error) {
 | 
				
			||||||
	query := this.Query(tx).
 | 
						var query = this.Query(tx).
 | 
				
			||||||
		Attr("listId", listId).
 | 
							Attr("listId", listId).
 | 
				
			||||||
		State(IPItemStateEnabled)
 | 
							State(IPItemStateEnabled)
 | 
				
			||||||
	if ip > math.MaxUint32 {
 | 
					
 | 
				
			||||||
		query.Where("(type='all' OR ipFromLong=:ip)")
 | 
						if iputils.IsIPv4(ip) {
 | 
				
			||||||
	} else {
 | 
							query.Where("(type='all' OR ipFrom =:ip OR INET_ATON(:ip) BETWEEN INET_ATON(ipFrom) AND INET_ATON(ipTo))").
 | 
				
			||||||
		query.Where("(type='all' OR ipFromLong=:ip OR (ipToLong>0 AND ipFromLong<=:ip AND ipToLong>=:ip))").
 | 
					 | 
				
			||||||
			Param("ip", ip)
 | 
								Param("ip", ip)
 | 
				
			||||||
 | 
						} else if iputils.IsIPv6(ip) {
 | 
				
			||||||
 | 
							query.Where("(type='all' OR ipFrom =:ip OR HEX(INET6_ATON(:ip)) BETWEEN HEX(INET6_ATON(ipFrom)) AND HEX(INET6_ATON(ipTo)))").
 | 
				
			||||||
 | 
								Param("ip", ip)
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							return nil, nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	one, err := query.Find()
 | 
						one, err := query.Find()
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,6 @@ package services
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
	"encoding/binary"
 | 
					 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeAPI/internal/db/models"
 | 
						"github.com/TeaOSLab/EdgeAPI/internal/db/models"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeAPI/internal/errors"
 | 
						"github.com/TeaOSLab/EdgeAPI/internal/errors"
 | 
				
			||||||
@@ -677,10 +676,6 @@ func (this *HTTPFirewallPolicyService) CheckHTTPFirewallPolicyIPStatus(ctx conte
 | 
				
			|||||||
			Error: "请输入正确的IP",
 | 
								Error: "请输入正确的IP",
 | 
				
			||||||
		}, nil
 | 
							}, nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	var ipLong uint64
 | 
					 | 
				
			||||||
	if ip.To4() != nil {
 | 
					 | 
				
			||||||
		ipLong = uint64(binary.BigEndian.Uint32(ip.To4()))
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var tx = this.NullTx()
 | 
						var tx = this.NullTx()
 | 
				
			||||||
	firewallPolicy, err := models.SharedHTTPFirewallPolicyDAO.ComposeFirewallPolicy(tx, req.HttpFirewallPolicyId, false, nil)
 | 
						firewallPolicy, err := models.SharedHTTPFirewallPolicyDAO.ComposeFirewallPolicy(tx, req.HttpFirewallPolicyId, false, nil)
 | 
				
			||||||
@@ -716,7 +711,7 @@ func (this *HTTPFirewallPolicyService) CheckHTTPFirewallPolicyIPStatus(ctx conte
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for _, listId := range listIds {
 | 
							for _, listId := range listIds {
 | 
				
			||||||
			item, err := models.SharedIPItemDAO.FindEnabledItemContainsIP(tx, listId, ipLong)
 | 
								item, err := models.SharedIPItemDAO.FindEnabledItemContainsIP(tx, listId, req.Ip)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				return nil, err
 | 
									return nil, err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -771,7 +766,7 @@ func (this *HTTPFirewallPolicyService) CheckHTTPFirewallPolicyIPStatus(ctx conte
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for _, listId := range listIds {
 | 
							for _, listId := range listIds {
 | 
				
			||||||
			item, err := models.SharedIPItemDAO.FindEnabledItemContainsIP(tx, listId, ipLong)
 | 
								item, err := models.SharedIPItemDAO.FindEnabledItemContainsIP(tx, listId, req.Ip)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				return nil, err
 | 
									return nil, err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,6 @@ package services
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
	"encoding/binary"
 | 
					 | 
				
			||||||
	"github.com/TeaOSLab/EdgeAPI/internal/db/models"
 | 
						"github.com/TeaOSLab/EdgeAPI/internal/db/models"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeAPI/internal/errors"
 | 
						"github.com/TeaOSLab/EdgeAPI/internal/errors"
 | 
				
			||||||
	rpcutils "github.com/TeaOSLab/EdgeAPI/internal/rpc/utils"
 | 
						rpcutils "github.com/TeaOSLab/EdgeAPI/internal/rpc/utils"
 | 
				
			||||||
@@ -492,10 +491,6 @@ func (this *IPItemService) CheckIPItemStatus(ctx context.Context, req *pb.CheckI
 | 
				
			|||||||
			Error: "请输入正确的IP",
 | 
								Error: "请输入正确的IP",
 | 
				
			||||||
		}, nil
 | 
							}, nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	var ipLong uint64
 | 
					 | 
				
			||||||
	if ip.To4() != nil {
 | 
					 | 
				
			||||||
		ipLong = uint64(binary.BigEndian.Uint32(ip.To4()))
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var tx = this.NullTx()
 | 
						var tx = this.NullTx()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -513,7 +508,7 @@ func (this *IPItemService) CheckIPItemStatus(ctx context.Context, req *pb.CheckI
 | 
				
			|||||||
	var isAllowed = list.Type == "white"
 | 
						var isAllowed = list.Type == "white"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// 检查IP名单
 | 
						// 检查IP名单
 | 
				
			||||||
	item, err := models.SharedIPItemDAO.FindEnabledItemContainsIP(tx, req.IpListId, ipLong)
 | 
						item, err := models.SharedIPItemDAO.FindEnabledItemContainsIP(tx, req.IpListId, req.Ip)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,6 @@ import (
 | 
				
			|||||||
	"github.com/TeaOSLab/EdgeAPI/internal/db/models"
 | 
						"github.com/TeaOSLab/EdgeAPI/internal/db/models"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeAPI/internal/db/models/stats"
 | 
						"github.com/TeaOSLab/EdgeAPI/internal/db/models/stats"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeAPI/internal/errors"
 | 
						"github.com/TeaOSLab/EdgeAPI/internal/errors"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeCommon/pkg/iputils"
 | 
					 | 
				
			||||||
	"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
 | 
						"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/firewallconfigs"
 | 
						"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/firewallconfigs"
 | 
				
			||||||
	"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
 | 
						"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
 | 
				
			||||||
@@ -263,30 +262,6 @@ func upgradeV0_0_9(db *dbs.DB) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// v0.0.10
 | 
					// v0.0.10
 | 
				
			||||||
func upgradeV0_0_10(db *dbs.DB) error {
 | 
					func upgradeV0_0_10(db *dbs.DB) error {
 | 
				
			||||||
	// IP Item列表转换
 | 
					 | 
				
			||||||
	ones, _, err := db.FindOnes("SELECT * FROM edgeIPItems ORDER BY id ASC")
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return err
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	for _, one := range ones {
 | 
					 | 
				
			||||||
		var ipFrom = one.GetString("ipFrom")
 | 
					 | 
				
			||||||
		var ipTo = one.GetString("ipTo")
 | 
					 | 
				
			||||||
		var ipFromLong string
 | 
					 | 
				
			||||||
		var ipToLong string
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		// TODO 支持IPv6
 | 
					 | 
				
			||||||
		if iputils.IsIPv4(ipFrom) {
 | 
					 | 
				
			||||||
			ipFromLong = iputils.ToLong(ipFrom)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		if iputils.IsIPv4(ipTo) {
 | 
					 | 
				
			||||||
			ipToLong = iputils.ToLong(ipTo)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		_, err = db.Exec("UPDATE edgeIPItems SET ipFromLong=?, ipToLong=? WHERE id=?", ipFromLong, ipToLong, one.GetInt64("id"))
 | 
					 | 
				
			||||||
		if err != nil {
 | 
					 | 
				
			||||||
			return err
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user