Jack Huang's Blog


  • 首页

  • 标签

  • 归档

  • 搜索

Java开发运行环境配置

发表于 2023-11-06 | 更新于 2024-03-03

想了解一下Java后端开发,故记录一下Java开发运行环境配置。

Java安装配置

JDK安装完毕后,重点要配置 JAVA_HOME、PATH、CLASSPATH 三个环境变量,请参考Win10下 Java环境变量配置。

  • JAVA_HOME 配置
1
2
# 示例
C:\Java\jdk1.8.0_91
  • PATH 配置
1
2
# 示例
%Java_Home%\bin;%Java_Home%\jre\bin;
  • CLASSPATH 配置
1
2
# 示例
.;%Java_Home%\bin;%Java_Home%\lib\dt.jar;%Java_Home%\lib\tools.jar

OpenJDK与JDK区别

OpenJDK和Oracle JDK之间最大的区别是许可。OpenJDK 是完全开源的Java,采用GNU 通用公共许可证。Oracle JDK需要在Oracle二进位代码许可协定下获得商业许可。

JDK版本选择

JDK的两个大版本是Oracle JDK和Open JDK,都属于Oracle。Oracle收购了SUN。Oracle JDK是Oracle基于免费的商业许可证版本。Open JDK是Oracle在开源许可证下的免费版本。

LTS(Long-term Support)即长期支持。目前可选的JDK LTS版本主要有:8、11、17、21。

推荐使用JDK LTS17。因为如果需求要用的SpringBoot3版本的话,那也必须要使用JDK17及以上版本了。

Spring Initializr

Spring Initializr 从本质上来说就是一个Web应用程序,它能为你生成Spring Boot项目结构。虽然不能生成应用程序代码,但它能为你提供一个基本的项目结构,以及一个用于构建代码的Maven或Gradle构建说明文件。

使用 Spring Initializr 创建项目的步骤如下:

  1. 打开浏览器,在浏览器地址栏输入 https://start.spring.io 地址。

目前 Spring Initializr 只支持 Sprint Boot 3以上,JDK 17以上,不便于在Win7上开发。需要创建支持 Sprint Boot 2 和 JDK 1.8版本的项目,具体方法请参考:

  • Did spring initializr stop support for spring boot 2.X?
  • Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12:test (default-test) on project
  1. 下载Spring Initializr创建的 Spring Boot 脚手架项目,解压缩,修改目录中的 pom.xml。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
  ...

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.13</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<java.version>1.8</java.version>
</properties>

...

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
</plugins>
</build>

Maven安装配置

Maven安装完毕后,重点要配置 MAVEN_HOME和PATH两个环境变量,请参考学Maven,这篇万余字的教程,真的够用了!。

Maven本地仓库配置

Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库。

Maven 仓库有三种类型:

  • 本地(local)
  • 中央(central)
  • 远程(remote)

Maven 本地仓库默认被创建在 %USER_HOME% 目录下。要修改默认位置,在 %M2_HOME%\conf 目录中的 Maven 的 settings.xml 文件中定义另一个路径。

1
2
3
4
5
6
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>C:/MyLocalRepository</localRepository>
</settings>

Maven常用命令说明

常用命令 中文含义 说明
mvn clean 清理 这个命令可以用来清理已经编译好的文件
mvn compile 编译 将 Java 代码编译成 Class 文件
mvn test 测试 项目测试
mvn package 打包 根据用户的配置,将项目打成 jar 包或者 war 包
mvn install 安装 手动向本地仓库安装一个 jar
mvn deploy 上传 将 jar 上传到私服

Gradle安装配置

请参考:

  • Gradle入门教程(IDEA使用)
  • Gradle 系列 (一)、Gradle相关概念理解,Groovy基础

在IDEA中创建Gradle项目时,会自动生成gradle文件夹,其中就包括gradle-wrapper.properties,IDEA默认使用gradle wrapper来创建项目,所以无需安装gradle也可以正常运行。gradle wrapper的优点之一就是可以自定义下载的gradle的版本,如果是团队协作的话,这个功能就非常方便,简单设置即可统一团队的构建工具版本。

当然,如果你想使用gradle的全局命令的话,还需要你自行修改环境变量配置,需要你到配置的gradle文件夹中找到wrapper文件夹一步步找到对应版本的bin文件夹,并添加到环境变量

gradle-wrapper.properties文件内容

1
2
3
4
5
6
7
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

Tomcat安装配置

Apache Tomcat 是Java Servlet、JavaServer Pages (JSP)、Java表达式语言和Java的WebSocket技术的一个开源实现 ,通常我们将Tomcat称为Web容器或者Servlet容器 。其安装过程请参考:

  • 保姆级 tomcat 快速入门教程

参考链接

  1. Win10下 Java环境变量配置,by Tyhoo_Wu.
  2. 学Maven,这篇万余字的教程,真的够用了!,by 江南一点雨.
  3. Maven最全教程,看了必懂,by 小知​.
  4. Java之Maven【IDEA版】入门到精通(一篇文章精通系列),by 程序员小杰#.
  5. 快速入门Maven第一天(使用Maven构建普通项目和WEB项目),by 思冉.
  6. Gradle大战Maven,胜负已分?,by 爱科学的卫斯理.
  7. Maven学习总结(三)——使用Maven构建项目,by 苍青浪.
  8. Maven Available Plugins,by apache.
  9. SpringBoot+Vue前后端分离项目,maven package自动打包整合,by 露娜妹.
  10. OpenJDK下载安装前你应该要知道的5件事,by javase.
  11. Open JDK下载,by 晓之木初.
  12. Java中JDK8、JDK11、JDK17,该怎么选择?,by aliyun.
  13. Java版本历史,by wiki.
  14. JDK的两个大版本,为什么要选LTS,by 编程还未.
  15. Did spring initializr stop support for spring boot 2.X?,by stackoverflow.
  16. Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12:test (default-test) on project,by stackoverflow.
  17. 理解Maven中的SNAPSHOT版本和正式版本,by huangbowen.
  18. win7系统Tomcat8安装步骤,by x_Lyric.
  19. 保姆级 tomcat 快速入门教程,by 田维常.
  20. Groovy DSL 设计之道,by 花花子.
  21. Gradle 系列 (一)、Gradle相关概念理解,Groovy基础,by sweetying.

C#程序汉化方法

发表于 2023-10-26 | 更新于 2023-11-05

可使用dnspy工具对C#程序进行汉化。

简介

dnSpy 是一个调试器和 .NET 程序集编辑器。即使您没有任何可用的源代码,您也可以使用它来编辑和调试程序集。主要特点:

  • 调试 .NET 和 Unity 程序集
  • 编辑 .NET 和 Unity 程序集
  • 浅色和深色主题

参考链接

  1. 成为汉化工吧!特辑 - 使用dnsPy汉化.NET程序~初体验,by 花开开不开.
  2. dnSpy readme,by dnspy.

网络拓扑自动发现的方法

发表于 2023-10-11

作为网络管理员,了解整个单位的网络拓扑结构,是保障和维护网络的基础。通常可以通过手动绘制的方式获得网络拓扑结构,但这种方法效率低,不精确,无法实时更新,因此需要一种网络拓扑自动发现的方法。下面记录一些与网络拓扑自动发现相关的方法与技术。

SNMP

SNMP是广泛应用于TCP/IP网络的网络管理标准协议,该协议能够支持网络管理系统,用以监测连接到网络上的设备是否有任何引起管理上关注的情况。

SNMP基本组件包括网络管理系统NMS(Network Management System)、代理进程(Agent)、被管对象(Managed Object)和管理信息库MIB(Management Information Base)。

snmp管理模型

图1 snmp管理模型

Nmap

Nmap(网络映射器)是一款用于网络发现和安全审计的网络安全工具。Nmap可以检测目标主机是否在线、端口开放情况、侦测运行的服务类型及版本信息、侦测操作系统与设备类型等信息。 它是网络管理员必用的软件之一,用以评估网络系统安全。

Traceroute

Traceroute命令是TCP/IP家族内另一个比较早的工具,它可用来发现测试点 和目标主机之间的路由器。路由器在转发包之前总是将其TTL值减1,如果TTL降为0,则路由器向源地址发送TTL-Expired ICMP消息。

Ping

Ping命令是IP网上最古老的一种工具,用来监测网络节点是否活着,或用于监测到网络节点间的往返时延(RTT)。通常Ping只涉及网络上的源和目的两节点,而忽略网络细节。另外我们可以使用广播 Ping,其Ping的地址不是一个单一的地址,而是子网的广播地址,所有位于该子网的主机均对此Ping包进行响应,从而一次就可得到子网内的全部活动主机。

参考链接

  1. 一种网络拓扑自动获取的方法,by 马黎黎,梁鹏飞.
  2. 什么是SNMP?,by huawei.
  3. Nmap,by wikipedia.

x3py插件框架学习笔记

发表于 2023-09-28 | 更新于 2023-10-11

x3py是一个可与Python等集成的轻量级C++插件框架。该框架使用了少部分STL,没有使用MFC、ATL、COM。x3py 通过使用 SWIG,可与 Python 等语言进行集成(当然可以单独使用C++)。使用此框架可以快速开发出更多的插件和应用软件,此框架已在 Windows/Linux/MacOSX 上测试过。

插件原理

请参考:

  • 插件原理
  • 事件驱动机制(Observer)

参考链接

  1. x3py wiki,by rhcad.
  2. 插件原理,by rhcad.
  3. c++插件机制的实现原理、过程、及使用 ,by 特立独行的猫a.
  4. 事件驱动机制(Observer),by rhcad.

华为交换机配置学习笔记

发表于 2023-09-14 | 更新于 2023-10-18

学习一下网络交换机配置的知识,记录一下。

eNSP简介

eNSP(Enterprise Network Simulation Platform)是一款由华为提供的免费的、可扩展的、图形化的网络设备仿真平台,主要对企业网路由器、交换机、WLAN等设备进行软件仿真,完美呈现真实设备部署实景,支持大型网络模拟,让你有机会在没有真实设备的情况下也能够开展实验测试,学习网络技术。

eNSP具体安装过程请参考:

  • ENSP安装教程【手把手教学】
  • 解决VirtualBox Host-Only NetWork #2问题
  • 使用VirtualBox打开虚拟机报错:Raw-mode is unavailable courtesy of Hyper-V
  • 5 Ways to Fix ‘Virtual machine has terminated unexpectedly’ Error

VRP简介

常用场景

IP与Mac绑定

具体流程如下:

  1. 查看目标IP将要接入的交换机管理IP。
  2. 登录接入层交换机
  3. 进入交换机系统视图,静态绑定IP与Mac地址

具体命令如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
telnet 192.168.0.111
> display current-configuration
# 查看mac要绑定的交换机端口
> display mac-address | include c03f-abcd-cc92
# 查看路由表
> display ip routing-table
> system-view
] interface GigabitEthernet 0/0/8
# 查看交换机网口配置
] display this
# 使能动态arp检测功能
] arp anti-attack check user-bind enable
# 使能ip报文检查功能
] ip source check user-bind enable
] display this
# 以下命令可将IP、Mac、Interface、Vlan进行绑定
] user-bind static ip-address 10.0.0.32 mac-address c03f-abcd-cc92 interface GigabitEthernet 0/0/8 vlan 8
] quit
> save

IP与Mac解绑

具体命令如下:

1
2
3
telnet 192.168.0.111
> system-view
] undo user-bind static ip-address 10.0.0.32 mac-address c03f-abcd-cc92 vlan 8

参考链接

  1. HCNA网络技术实验指南,by 华为技术有限公司.
  2. ENSP安装教程【手把手教学】,by 黑城笑.
  3. 解决VirtualBox Host-Only NetWork #2问题,by King.
  4. 使用VirtualBox打开虚拟机报错:Raw-mode is unavailable courtesy of Hyper-V,by yanjian_0809.
  5. 5 Ways to Fix ‘Virtual machine has terminated unexpectedly’ Error,by Kevin Arrows.

VSCode常用插件推荐

发表于 2023-09-12

Visual Studio Code(简称VS Code)是一个由微软开发,同时支持Windows 、 Linux和macOS等操作系统且开放源代码的代码编辑器。与Sublime相比,VSCode开源,且有强大的社区支持,各种插件层出不穷。下面记录一些常用的VSCode插件。

Hex Editor

可以二进制形式查看编辑文件内容。例如,可方便查看同样汉字在不同字符编码下对应的二进制。

参考链接

  1. VS code常用插件推荐(总结整理篇),by 苏梦苓​.

nodejs参考架构

发表于 2023-09-05

JavaScript 生态系统是快速发展且充满活力的,但是各种各样的选项可能会使在 Node.js 包之间进行选择变得非常困难。因此,拥有参考架构可以帮助团队避免一次又一次地重新学习相同的内容。

日志记录工具

Pino 是非常低的开销node.js日志记录器。

Pino with Express

1
npm install pino-http
1
2
3
4
5
6
7
8
9
10
11
const app = require('express')()
const pino = require('pino-http')()

app.use(pino)

app.get('/', function (req, res) {
req.log.info('something')
res.send('hello world')
})

app.listen(3000)

代码一致性工具

ESLint 用于检查JavaScript代码是否符合规则,由Nicholas C. Zakas在2013年创建。

选择 Web 框架

构建企业Node.js应用程序时做出的关键选择之一是将作为其基础的 Web 框架。而 Express.js 是一个不错的默认选择。

代码覆盖率

代码覆盖率是一种软件测试指标,它确定项目中有多少代码在测试过程下已成功验证,这反过来又有助于分析软件验证的彻底程度。

  • nyc,可能是最流行的代码覆盖率工具。该模块最受欢迎的主要原因之一是它与大多数 JavaScript 测试框架都能很好地配合。nyc是 的后继命令行界面 (CLI) istanbul。
  • Jest,当您使用该选项运行该工具时,它会生成覆盖范围–coverage。

测试示例

以nyc为例,该示例由文件中的两个简单函数以及使用Mocha 测试运行程序index.js的目录中的测试组成。

第一个函数将两个数字相加:

1
2
3
4
5
function addTwoNumbers(x, y) {

return x + y;

}

这个函数可以通过这个简单的测试轻松覆盖:

1
2
3
4
5
6
7
8
9
describe('testing for coverage', () => {

it ('should add 2 numbers correctly', () => {

assert.equal(addTwoNumbers(1,1), 2);

});

});

参考链接

  1. Why we developed the Node.js reference architecture,by redhat.
  2. Introduction to the Node.js reference architecture, Part 7: Code coverage,by redhat.

Python从PE文件中导出资源文件

发表于 2023-08-16 | 更新于 2024-06-18

最近需要修改一个QT编写的应用,就是将资源图片修改一下,但是资源图片被打包到DLL的.rdata段中,无法直接导出,于是想通过Python直接读取导出,然后定位需要修改图片的位置。具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# -*- coding:utf-8 -*-

import os,sys,re

def find_all_pos(filename,feature):
"""打开二进制文件,搜索指定特征的位置,并返回所有位置的列表
"""
with open(filename, 'rb') as binFile:
binFileStr = binFile.read()
posArray = [m.start() for m in re.finditer(feature, binFileStr)]
return posArray

def export_all_png(filename,posArray):
"""打开二进制文件,根据特征位置数组,导出所有的PNG文件
"""
with open(filename, 'rb') as binFile:
for i in range(len(posArray)-1):
pngLen = posArray[i+1] - posArray[i]
# print(pngLen)
binFile.seek(posArray[i])
pngFileBin = binFile.read(pngLen)
pngFile = open("res\\"+str(i)+".png", "wb")
pngFile.write(pngFileBin)

def find_feature_pos(filename,feature):
"""打开二进制文件,搜索指定特征最早出现的位置,并返回结果
"""
with open(filename, 'rb') as binFile:
binFileStr = binFile.read()
result = re.search(feature,binFileStr)
try:
return result.span(0)[0]
except:
return -1

def merge_new_file(filename,feature_pos):
"""打开二进制文件,提取特征之后的数据,与新的文件头合并
"""
file_header=b"\x44\x55\x66"
with open(filename, 'rb') as binFile:
binFile.seek(feature_pos)
datFileBin = binFile.read()
datFile = open(filename[:-4]+"_new"+filename[-4:], "wb")
datFile.write(file_header)
datFile.write(datFileBin)

def walk_files(src_filepath = ".", file_name_feature=".exe"):
"""遍历目录中的文件,提取指定特征的文件
"""
filepath_list = []

for root, dirs, files in os.walk(src_filepath):
for file in files:
if file.endswith(file_name_feature)==False:
continue
if root == '.':
root_path = os.getcwd() + "/"
else:
root_path = root

if (root_path != src_filepath) and (root != '.'):
filepath = root_path + "/" + file
else:
filepath = root_path + file

if filepath not in filepath_list:
filepath_list.append(filepath)

return filepath_list

if __name__ == "__main__":
for path in sys.argv[1:]:
if os.path.isfile(path):
posArray = find_all_pos(path,b"\x89\x50\x4E\x47\x0D\x0A\x1A\x0A")
# 位置数组应该大于1
if(len(posArray)>1):
# print(posArray)
if(os.path.exists("res")==False):
os.makedirs("res")
pngList=""
for i in range(len(posArray)):
pngList = pngList + str(i) + ",0x%x"%posArray[i] +"\n"
# 保存图片位置信息
pngFileMeta = open("res\\pnglistpos.csv", "w")
pngFileMeta.write(pngList)

export_all_png(path,posArray)

运行时采用如下命令:

1
2
3
python -m venv env
.\env\Scripts\activate
python utf8_to_gbk.py filepath

参考链接

  1. PNG文件格式详解,by oriole.
  2. Python输出列表list,by huang_0430.
  3. python创建目录(文件夹),by FanWinter.
  4. python 数字 十六进制 打印,by wowocpp.
  5. python文件的打开、读取、关闭、写入与二进制文件的读写操作,by aliyun.
  6. How to find all occurrences of a substring?,by stackoverflow.
  7. 如何逆向解决QT程序汉化中的乱码问题-干货,by 葫芦娃很厉害.
  8. 如何汉化一个软件,by CCDebuger.
  9. Qt 资源系统(Qt Resource System),by 南理汉子.

Web服务器配置方法记录

发表于 2023-08-03 | 更新于 2023-08-08

常用的Web服务器主要有Apache和Ngnix,下面记录其配置方法。

Apache Web服务器

Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器软件,可以在大多数电脑操作系统中运行。由于其跨平台和安全性,被广泛使用,是最流行的Web服务器软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。

httpd.conf配置

Apache的主配置文件是httpd.conf。

httpd-vhosts.conf配置

Apache虚拟主机的配置文件是httpd-vhosts.conf。

问题清单

  • Apache配置虚拟主机后,不能访问localhost,但使用127.0.0.1可以访问的问题

请参考Apache配置虚拟主机后,不能访问localhost的问题。

Ngnix Web服务器

Nginx(发音同“engine X”)是异步框架的网页服务器,也可以用作反向代理、负载平衡器和HTTP缓存。该软件由俄罗斯程序员伊戈尔·赛索耶夫(Игорь Сысоев)开发并于2004年首次公开发布。2011年成立同名公司以提供支持服务。2019年3月11日,Nginx公司被F5网络公司以6.7亿美元收购。

nginx.conf配置

Nginx的主配置文件是nginx.conf,这个配置文件一共由三部分组成,分别为全局块、events块和http块。在http块中,又包含http全局块、多个server块。每个server块中,可以包含server全局块和多个location块。在同一配置块中嵌套的配置块,各个之间不存在次序关系。

参考链接

  1. Apache配置文件httpd.conf详解,by garyond.
  2. Apache配置文件详解,by 思忆技术.
  3. Apache httpd.conf配置文件 3(虚拟主机),by 乌托邦眺望.
  4. Apache HTTP服务器,by wikipedia.
  5. Nginx配置文件详解,by 程序员自由之路.
  6. 万字长文看Nginx配置详解!,by 大江狗.
  7. Nginx,by wikipedia.
  8. Apache配置虚拟主机后,不能访问localhost的问题,by LauEl.

Windows程序反调试技术笔记

发表于 2023-07-27

最近在使用IDA和X64dgb调试Windows可执行程序时,老是失败,严重怀疑其使用了反调试技术。因此学习一下Windows程序反调试技术,以期望能解决Windows可执行程序动态调试失败的问题。

静态反调试技术

进程状态检测

调试环境检测

动态反调试技术

时钟检测

异常处理

0XCC探测

硬件断点检测

自调试

单步检测

参考链接

  1. Windows下反(反)调试技术汇总,by topsec.
上一页1…8910…53下一页

Jack Huang

521 日志
67 标签
© 2025 Jack Huang
由 Hexo 强力驱动
|
主题 — NexT.Muse