fix proto
This commit is contained in:
parent
2e6e1e5b3f
commit
1554f3fe0b
@ -15,26 +15,17 @@ struct IPHeader {
|
||||
let id: UInt16
|
||||
let offset: UInt16
|
||||
let timeToLive: UInt8
|
||||
let proto:UInt8
|
||||
let proto: UInt8
|
||||
let checksum: UInt16
|
||||
let source: UInt32
|
||||
let destination: UInt32
|
||||
|
||||
var source_ip: String {
|
||||
return intToIp(source)
|
||||
return SDLUtil.int32ToIp(source)
|
||||
}
|
||||
|
||||
var destination_ip: String {
|
||||
return intToIp(destination)
|
||||
}
|
||||
|
||||
private func intToIp(_ num: UInt32) -> String {
|
||||
let ip0 = (UInt8) (num >> 24 & 0xFF)
|
||||
let ip1 = (UInt8) (num >> 16 & 0xFF)
|
||||
let ip2 = (UInt8) (num >> 8 & 0xFF)
|
||||
let ip3 = (UInt8) (num & 0xFF)
|
||||
|
||||
return "\(ip0).\(ip1).\(ip2).\(ip3)"
|
||||
return SDLUtil.int32ToIp(destination)
|
||||
}
|
||||
|
||||
public var description: String {
|
||||
@ -83,4 +74,15 @@ struct IPPacket {
|
||||
func getPayload() -> Data {
|
||||
return data.subdata(in: 20..<data.count)
|
||||
}
|
||||
|
||||
// 获取ip数据包里面目标端口
|
||||
func getDstPort() -> UInt16? {
|
||||
guard case .ipv4 = IPVersion(rawValue: self.header.version), self.data.count >= 24 else {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 系统只会读取到ipv4的数据包,(srcPort:16, dstPort:16, ...)
|
||||
return UInt16(bytes: (self.data[22], self.data[23]))
|
||||
}
|
||||
|
||||
}
|
||||
@ -498,10 +498,19 @@ actor SDLContextActor {
|
||||
// 检查权限逻辑
|
||||
let identitySnapshot = self.snapshotPublisher.current()
|
||||
if let ruleMap = identitySnapshot.lookup(data.identityID) {
|
||||
if ruleMap.isAllow(proto: 2, port: 3) {
|
||||
let proto = ipPacket.header.proto
|
||||
switch TransportProtocol(rawValue: proto) {
|
||||
case .udp, .tcp:
|
||||
if let dstPort = ipPacket.getDstPort(), ruleMap.isAllow(proto: proto, port: dstPort) {
|
||||
let packet = NEPacket(data: ipPacket.data, protocolFamily: 2)
|
||||
self.provider.packetFlow.writePacketObjects([packet])
|
||||
}
|
||||
case .icmp:
|
||||
let packet = NEPacket(data: ipPacket.data, protocolFamily: 2)
|
||||
self.provider.packetFlow.writePacketObjects([packet])
|
||||
default:
|
||||
()
|
||||
}
|
||||
} else {
|
||||
// 向服务器请求权限逻辑
|
||||
if let sessionToken = self.sessionToken {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user