Skip to content

Commit 0c27569

Browse files
Merge pull request #6175 from 317787106/feature/sensitive_ip
feat(log): Don't logging ip of fast forward node
2 parents 3c856c8 + e72dbc4 commit 0c27569

File tree

5 files changed

+136
-0
lines changed

5 files changed

+136
-0
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package org.tron.common.log.layout;
2+
3+
import ch.qos.logback.classic.pattern.ClassicConverter;
4+
import ch.qos.logback.classic.spi.ILoggingEvent;
5+
import com.google.common.cache.Cache;
6+
import com.google.common.cache.CacheBuilder;
7+
import java.util.regex.Matcher;
8+
import java.util.regex.Pattern;
9+
import lombok.extern.slf4j.Slf4j;
10+
import org.tron.common.parameter.CommonParameter;
11+
12+
@Slf4j(topic = "Parser")
13+
public class DesensitizedConverter extends ClassicConverter {
14+
15+
private static final int SENSITIVE_WORD_SIZE = 1_000;
16+
17+
private static final Pattern pattern = Pattern.compile(
18+
"(((25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}(25[0-5]|2[0-4]\\d|((1\\d{2})|"
19+
+ "([1-9]?\\d))))");
20+
21+
private static final Cache<String, String> sensitiveCache = CacheBuilder.newBuilder()
22+
.maximumSize(SENSITIVE_WORD_SIZE)
23+
.recordStats().build();
24+
25+
public static void addSensitive(String key, String value) {
26+
sensitiveCache.put(key, value);
27+
}
28+
29+
private String desensitization(String content) {
30+
Matcher matcher = pattern.matcher(content);
31+
while (matcher.find()) {
32+
String key = matcher.group();
33+
String value = sensitiveCache.getIfPresent(key);
34+
if (value != null) {
35+
content = content.replaceAll(key, value);
36+
} else {
37+
content = content.replaceAll(key, "IP");
38+
}
39+
}
40+
41+
return content;
42+
}
43+
44+
@Override
45+
public String convert(ILoggingEvent iLoggingEvent) {
46+
String source = iLoggingEvent.getFormattedMessage();
47+
return CommonParameter.getInstance().isFastForward() ? desensitization(source) : source;
48+
}
49+
}

framework/src/main/java/org/tron/core/net/service/relay/RelayService.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,11 @@
1818
import org.tron.common.crypto.SignInterface;
1919
import org.tron.common.crypto.SignUtils;
2020
import org.tron.common.es.ExecutorServiceManager;
21+
import org.tron.common.log.layout.DesensitizedConverter;
2122
import org.tron.common.parameter.CommonParameter;
2223
import org.tron.common.utils.ByteArray;
24+
import org.tron.common.utils.ByteUtil;
25+
import org.tron.common.utils.DecodeUtil;
2326
import org.tron.common.utils.Sha256Hash;
2427
import org.tron.core.ChainBaseManager;
2528
import org.tron.core.capsule.TransactionCapsule;
@@ -165,6 +168,10 @@ public boolean checkHelloMessage(HelloMessage message, Channel channel) {
165168
}
166169
if (flag) {
167170
TronNetService.getP2pConfig().getTrustNodes().add(channel.getInetAddress());
171+
byte[] addressByte = ByteUtil.merge(new byte[] {DecodeUtil.addressPreFixByte},
172+
msg.getAddress().toByteArray());
173+
DesensitizedConverter.addSensitive(channel.getInetAddress().toString().substring(1),
174+
ByteArray.toHexString(addressByte));
168175
}
169176
return flag;
170177
} catch (Exception e) {

framework/src/main/resources/logback.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
<!-- Be sure to flush latest logs on exit -->
66
<shutdownHook class="org.tron.core.config.TronLogShutdownHook"/>
7+
<conversionRule conversionWord="m"
8+
converterClass="org.tron.common.log.layout.DesensitizedConverter"/>
79

810
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
911
<encoder>
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package org.tron.common.logsfilter;
2+
3+
import java.lang.reflect.InvocationTargetException;
4+
import java.lang.reflect.Method;
5+
import org.junit.Assert;
6+
import org.junit.Test;
7+
import org.tron.common.log.layout.DesensitizedConverter;
8+
9+
public class DesensitizedConverterTest {
10+
11+
@Test
12+
public void testReplace()
13+
throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
14+
DesensitizedConverter converter = new DesensitizedConverter();
15+
DesensitizedConverter.addSensitive("192.168.1.10", "address1");
16+
DesensitizedConverter.addSensitive("197.168.1.10", "address2");
17+
18+
Method method = converter.getClass().getDeclaredMethod(
19+
"desensitization", String.class);
20+
method.setAccessible(true);
21+
22+
String logStr1 = "This is test log /192.168.1.10:100, /197.168.1.10:200, /197.168.1.10:100";
23+
String result1 = (String) method.invoke(converter, logStr1);
24+
Assert.assertEquals("This is test log /address1:100, /address2:200, /address2:100",
25+
result1);
26+
27+
String logStr2 = "This is test log /192.168.1.100:100, /197.168.1.10:200, /197.168.1.10:100";
28+
String result2 = (String) method.invoke(converter, logStr2);
29+
Assert.assertEquals("This is test log /IP:100, /address2:200, /address2:100",
30+
result2);
31+
}
32+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package org.tron.core.jsonrpc;
2+
3+
import static org.tron.common.utils.Commons.decodeFromBase58Check;
4+
import static org.tron.keystore.Wallet.generateRandomBytes;
5+
6+
import com.google.protobuf.ByteString;
7+
import org.junit.Assert;
8+
import org.junit.Test;
9+
import org.tron.common.utils.ByteArray;
10+
import org.tron.core.capsule.BlockCapsule;
11+
import org.tron.core.services.jsonrpc.JsonRpcApiUtil;
12+
import org.tron.protos.Protocol.Block;
13+
import org.tron.protos.Protocol.BlockHeader;
14+
import org.tron.protos.Protocol.BlockHeader.raw;
15+
import org.tron.protos.contract.SmartContractOuterClass.TriggerSmartContract;
16+
17+
public class ApiUtilTest {
18+
19+
@Test
20+
public void testGetBlockID() {
21+
byte[] mockedHash = generateRandomBytes(128);
22+
// common parent block
23+
BlockCapsule blockCapsule = new BlockCapsule(Block.newBuilder().setBlockHeader(
24+
BlockHeader.newBuilder().setRawData(
25+
raw.newBuilder().setParentHash(ByteString.copyFrom(mockedHash))
26+
.setNumber(0))).build());
27+
String blockIdStr = JsonRpcApiUtil.getBlockID(blockCapsule.getInstance());
28+
Assert.assertEquals(2 + 64, blockIdStr.length());
29+
}
30+
31+
@Test
32+
public void testTriggerCallContract() {
33+
byte[] address = decodeFromBase58Check("TEPRbQxXQEpHpeEx8tK5xHVs7NWudAAZgu");
34+
//nile usdt
35+
byte[] contractAddress = decodeFromBase58Check("TXYZopYRdj2D9XRtbG411XZZ3kM5VkAeBf");
36+
long callValue = 100;
37+
//transfer to address TVjsyZ7fYF3qLF6BQgPmTEZy1xrNNyVAAA with 10*10^6
38+
byte[] data = ByteArray.fromHexString("a9059cbb000000000000000000000000d8dd39e2dea27a4000"
39+
+ "1884901735e3940829bb440000000000000000000000000000000000000000000000000000000000989680");
40+
long tokenValue = 10;
41+
String tokenId = "1000001";
42+
TriggerSmartContract triggerSmartContract = JsonRpcApiUtil.triggerCallContract(address,
43+
contractAddress, callValue, data, tokenValue, tokenId);
44+
Assert.assertNotNull(triggerSmartContract);
45+
}
46+
}

0 commit comments

Comments
 (0)