Python实现
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# @time:2022/01/12
# @author: xsshim
import socket
import re
class WebLogic:
def __init__(self, url, port):
self.ip = url
self.port = port
self.sock = self.get_sock(self.ip, self.port)
self.t3_info = self.t3_hand()
self.t3_version = self.regx_ver(self.t3_info.decode())
self.t3_close()
@staticmethod
def get_sock(ip, port):
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = (ip, port)
sock.connect(server_address)
sock.settimeout(10)
print("[INFO]: connecting to %s port %s" % server_address)
return sock
except Exception as e:
print("[ERROR]: " + str(e))
def t3_hand(self):
try:
handshake = b't3 10.3.6\nAS:255\nHL:19\nMS:10000000\n\n'
print("[INFO]: sending handshake packet ...")
self.sock.sendall(handshake)
print("[INFO]: received handshake data")
data0 = self.sock.recv(1024)
print(data0)
if len(data0) < 5:
data1 = self.sock.recv(1024)
print(data1)
return data1
return data0
except:
return b''
@staticmethod
def regx_ver(info):
try:
version = re.findall(r":(.*).false", info)[0]
return version
except:
return '无法获取版本信息'
def t3_close(self):
self.sock.close()
if __name__ == '__main__':
print("________________________________________________________________________")
wb = WebLogic("192.168.23.119", 7003)
print("该 Weblogic 的版本为 " + wb.t3_version)
print("________________________________________________________________________")
Java实现
import cn.hutool.core.util.ReUtil;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class WeblogicVersionByT3 {
public static byte[] hexStrToBinaryStr(String hexString) {
hexString = hexString.replaceAll(" ", "");
int len = hexString.length();
int index = 0;
byte[] bytes = new byte[len / 2];
while (index < len) {
String sub = hexString.substring(index, index + 2);
bytes[index / 2] = (byte) Integer.parseInt(sub, 16);
index += 2;
}
return bytes;
}
public static String getVersion(String content) {
content = content.replace("HELO:", "").replace(".false", "").replace(".true", "");
String getVersionRegex = "[\\d\\.]+";
List<String> result = ReUtil.findAll(getVersionRegex, content, 0, new ArrayList<String>());
return result != null && result.size() > 0 ? result.get(0) : "";
}
public static String byteToHex(byte num) {
char[] hexDigits = new char[2];
hexDigits[0] = Character.forDigit((num >> 4) & 0xF, 16);
hexDigits[1] = Character.forDigit((num & 0xF), 16);
return new String(hexDigits);
}
public static String encodeHexString(byte[] byteArray) {
StringBuffer hexStringBuffer = new StringBuffer();
for (int i = 0; i < byteArray.length; i++) {
hexStringBuffer.append(byteToHex(byteArray[i]));
}
return hexStringBuffer.toString();
}
private static String asciiToHex(String asciiValue) {
byte[] bytes = asciiValue.getBytes();
// return Hex.encodeHexString(bytes);
return encodeHexString(bytes);
}
public static byte hexToByte(String hexString) {
int firstDigit = toDigit(hexString.charAt(0));
int secondDigit = toDigit(hexString.charAt(1));
return (byte) ((firstDigit << 4) + secondDigit);
}
private static int toDigit(char hexChar) {
int digit = Character.digit(hexChar, 16);
if (digit == -1) {
throw new IllegalArgumentException("Invalid Hexadecimal Character: " + hexChar);
}
return digit;
}
public static byte[] decodeHexString(String hexString) {
if (hexString.length() % 2 == 1) {
throw new IllegalArgumentException("Invalid hexadecimal String supplied.");
}
byte[] bytes = new byte[hexString.length() / 2];
for (int i = 0; i < hexString.length(); i += 2) {
bytes[i / 2] = hexToByte(hexString.substring(i, i + 2));
}
return bytes;
}
private static String hexToAscii(String hexString) {
byte[] bytes = null;
// bytes = Hex.decodeHex(hexString);
bytes = decodeHexString(hexString);
String s = new String(bytes);
return s;
}
public static void main(String[] args) throws Exception {
String msg = "t3 12.2.1\n" + "AS:255\n" + "HL:19\n" + "MS:10000000\n" + "PU:t3://us-l-breens:7001\n\n";
System.out.println(
"74332031322e322e310a41533a3235350a484c3a31390a4d533a31303030303030300a50553a74333a2f2f75732d6c2d627265656e733a373030310a0a");
System.out.println(asciiToHex(msg));
System.out.println(hexToAscii(asciiToHex(msg)));
String version = "";
try {
Socket socket = new Socket("127.0.0.1", 7001);
OutputStream out = socket.getOutputStream();
InputStream is = socket.getInputStream();
out.write(hexStrToBinaryStr(asciiToHex(msg)));
out.flush();
Thread.sleep(1);
byte[] bytes = new byte[4096];
int length = is.read(bytes);
byte[] rspByte = Arrays.copyOfRange(bytes, 0, length);
socket.close();
System.out.println(new String(rspByte));
version = getVersion(new String(rspByte));
} catch (Exception e) {
version = "";
}
System.out.println("weblogic的版本是" + version);
}
}
需要加入maven库
<dependencies>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.5.16</version>
</dependency>
</dependencies>