完善了agent

This commit is contained in:
lik
2026-05-30 16:41:26 +08:00
parent 797e69a0c2
commit b92853a717
30 changed files with 1972 additions and 22 deletions

View File

@@ -0,0 +1,157 @@
import * as z from "zod"
import { tool } from "langchain"
import os from 'os'
import { promisify } from 'util'
import { exec } from 'child_process'
const execPromise = promisify(exec)
/**
* 获取系统活动连接和Socket信息工具
* @returns {string} - 返回Socket信息的 JSON 字符串,包括活动连接和监听端口等
*/
export const getSocketInfoTool = tool(
async (input) => {
try {
const socketInfo = {
platform: os.platform(),
activeConnections: [],
listeningPorts: []
}
// 获取活动连接Windows
if (os.platform() === 'win32') {
try {
const { stdout } = await execPromise('netstat -ano')
const lines = stdout.trim().split('\n').slice(4)
socketInfo.activeConnections = lines.map(line => {
const parts = line.trim().split(/\s+/)
if (parts.length >= 5) {
return {
protocol: parts[0],
localAddress: parts[1],
foreignAddress: parts[2],
state: parts[3],
processId: parts[4]
}
}
return null
}).filter(item => item)
} catch (error) {
console.error('Error getting active connections:', error)
}
// 获取监听端口Windows
try {
const { stdout } = await execPromise('netstat -an | findstr LISTENING')
const lines = stdout.trim().split('\n')
socketInfo.listeningPorts = lines.map(line => {
const parts = line.trim().split(/\s+/)
if (parts.length >= 4) {
return {
protocol: parts[0],
localAddress: parts[1],
state: parts[3]
}
}
return null
}).filter(item => item)
} catch (error) {
console.error('Error getting listening ports:', error)
}
}
// 获取活动连接Linux
else if (os.platform() === 'linux') {
try {
const { stdout } = await execPromise('ss -tuln')
const lines = stdout.trim().split('\n').slice(1)
socketInfo.activeConnections = lines.map(line => {
const parts = line.trim().split(/\s+/)
if (parts.length >= 5) {
return {
protocol: parts[0],
state: parts[1],
localAddress: parts[4],
peerAddress: parts[5]
}
}
return null
}).filter(item => item)
} catch (error) {
console.error('Error getting active connections:', error)
}
// 获取监听端口Linux
try {
const { stdout } = await execPromise('ss -tulpn')
const lines = stdout.trim().split('\n').slice(1)
socketInfo.listeningPorts = lines.map(line => {
const parts = line.trim().split(/\s+/)
if (parts.length >= 6) {
return {
protocol: parts[0],
state: parts[1],
localAddress: parts[4],
processInfo: parts[5]
}
}
return null
}).filter(item => item)
} catch (error) {
console.error('Error getting listening ports:', error)
}
}
// 获取活动连接macOS
else if (os.platform() === 'darwin') {
try {
const { stdout } = await execPromise('netstat -an')
const lines = stdout.trim().split('\n').slice(2)
socketInfo.activeConnections = lines.map(line => {
const parts = line.trim().split(/\s+/)
if (parts.length >= 6) {
return {
protocol: parts[0],
localAddress: parts[3],
foreignAddress: parts[4],
state: parts[5]
}
}
return null
}).filter(item => item)
} catch (error) {
console.error('Error getting active connections:', error)
}
// 获取监听端口macOS
try {
const { stdout } = await execPromise('netstat -an | grep LISTEN')
const lines = stdout.trim().split('\n')
socketInfo.listeningPorts = lines.map(line => {
const parts = line.trim().split(/\s+/)
if (parts.length >= 6) {
return {
protocol: parts[0],
localAddress: parts[3],
foreignAddress: parts[4],
state: parts[5]
}
}
return null
}).filter(item => item)
} catch (error) {
console.error('Error getting listening ports:', error)
}
}
return JSON.stringify(socketInfo, null, 2)
} catch (error) {
console.error('Error getting socket info:', error)
return JSON.stringify({ error: error.message }, null, 2)
}
},
{
name: "get_socket_info",
description: `获取系统活动连接和Socket信息包括TCP/UDP连接、监听端口、进程ID等`,
schema: z.object({})
}
)