.markdown-body pre,.markdown-body pre>code.hljs{color:#333;background:#f8f8f8}.hljs-comment,.hljs-quote{color:#998;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-subst{color:#333;font-weight:700}.hljs-literal,.hljs-number,.hljs-tag .hljs-attr,.hljs-template-variable,.hljs-variable{color:teal}.hljs-doctag,.hljs-string{color:#d14}.hljs-section,.hljs-selector-id,.hljs-title{color:#900;font-weight:700}.hljs-subst{font-weight:400}.hljs-class .hljs-title,.hljs-type{color:#458;font-weight:700}.hljs-attribute,.hljs-name,.hljs-tag{color:navy;font-weight:400}.hljs-link,.hljs-regexp{color:#009926}.hljs-bullet,.hljs-symbol{color:#990073}.hljs-built_in,.hljs-builtin-name{color:#0086b3}.hljs-meta{color:#999;font-weight:700}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}

1. MCP协议简介

Model Context Protocol (MCP)是Anthropic在2024年推出的开放标准,旨在统一大型语言模型(LLM)与外部数据源和工具之间的通信。它解决了AI模型因数据孤岛限制而无法充分发挥潜力的问题,使AI应用能够访问和操作本地及远程数据。

MCP 是让不同 AI 模型和外部工具通过统一接口协作的通信协议,类似给所有设备统一用USB-C 接口

MCP目前存在的问题:

MCP由 Anthropic 提出,但目前该协议只有openAI进行了实现,如果其他模型厂商不予实现,可能实用性不是很乐观

2. 三层架构设计

MCP遵循清晰的三层架构模式:

Host层

● 与用户直接交互的应用程序(如Claude Desktop、Cursor、Cline等)

● 提供用户界面,处理用户查询到大模型,大模型通过Client路由到指定server

Client层

● 实现MCP的客户端标准,作为大模型和Server的桥梁

● 业界主流方案是一个Client与多个MCP Server建立连接

● 当大模型需要外部工具时,构造请求并将响应传回模型

Server层

● 实现MCP服务端标准,将不同数据源格式统一为MCP标准化结构,支持本地部署与远程连接

● 提供核心功能:定义API和Description,表示服务可提供的功能

● 处理Client的请求并返回结果

3. 通信机制与工作流程

通信协议

● 本地通讯:通过标准输入输出(stdin/stdout)传输,子进程方式通信

● 远程通讯:使用SSE或WebSockets

● 数据格式:采用JSON-RPC 2.0格式

注册与初始化过程

MCP服务器注册通过手动配置完成,目前不存在自动化的服务发现机制:

  1. 服务器创建与配置:开发者创建符合MCP协议的服务器程序,准备连接信息

  2. 在Host中添加配置:

"mcpServers": {
  "dev-tools": {
    "command": "python",
    "args": ["/absolute/path/to/my-mcp-server/server.py"]
  },
  "weather": {      
    "transport": "sse",      
    "url": "https://weather-mcp.example.com/api/mcp",
    "description": "Weather data service",      
    "auth": {        
      "type": "api-key",        
      "headerName": "X-API-Key",        
      "key": "${WEATHER_API_KEY}"
    }    
  }
}

  1. 初始化与功能协商:Host启动时初始化MCP Client组件

Client连接所有MCP Server并获取它们提供的Tools能力进行存储,用户每次提问时Host将这些能力信息作为系统提示词传到大模型的上下文中

实际工作流程

  1. 用户发起查询:Host调用大模型,携带Server工具信息

  2. 需求分析:大模型识别需要外部工具时,基于Server描述决定调用哪个Server和方法

  3. 数据交换:Client向Server发送请求,Server处理后返回数据

  4. 结果整合:Client将数据返回给大模型,模型完成最终响应

4. 实现方案

Client和Server连接模式

● 基本模式:一个Client对应一个Server

● 高级模式(LangChain / LangGraph的实现):一个Client管理多个Server连接

实现选项

  1. 使用开源Client:如Open MCP Client (open-mcp-client.vercel.app/)

  2. 使用官方SDK:Anthropic提供的@modelcontextprotocol/sdk自行实现

4. 智能运维助手场景

需求分析

智能运维助手需要访问服务器日志数据,辅助AI进行分析和诊断。可以根据MCP架构实现以下组件:

  1. MCP Server (必须实现):访问服务器日志、系统状态和监控数据

  2. MCP Client (自行实现/社区实现):大模型与Server的桥梁,有开源库,比如Langchain等库已经实现好了

  3. MCP Host (可选实现):提供用户交互界面

Client的实现方案

  1. 使用现有开源Client, 一个client管理多个server:

Open MCP Client (open-mcp-client.vercel.app/)

  1. 使用官方SDK自行实现:

Anthropic提供的@modelcontextprotocol/sdk

5. 代码实现示例

5.1 MCP Server实现

// mcp_server.ts
import express from 'express';
import bodyParser from 'body-parser';
import { exec } from 'child_process';
import fs from 'fs/promises';
import path from 'path';
import childProcess from 'child_process';
 
const app = express();
app.use(bodyParser.json());
 
// 工具定义
const TOOLS = [
  {
    name: "diagnose_service",
    description: "Diagnose a service status",
    parameters: {
      type: "object",
      properties: {
        service_name: {
          type: "string",
          description: "Name of the service to diagnose"
        }
      },
      required: ["service_name"]
    }
  }
];
 
// MCP协议处理函数
async function handleMcpRequest(request: any) {
  const method = request.method;
  const params = request.params || {};
  const requestId = request.id;
 
  console.log(`Received MCP request: ${method}`, params);
 
  // 列出工具
  if (method === 'list_tools') {
    return {
      jsonrpc: '2.0',
      result: {
        tools: TOOLS
      },
      id: requestId
    };
  }
    
  // 调用工具
  if (method === 'call_tool') {
    const toolName = params.name;
    const toolArgs = params.arguments || {};
    
    console.log(`Calling tool: ${toolName} with arguments:`, toolArgs);
    
    // 服务诊断工具
    if (toolName === 'diagnose_service') {
      const serviceName = toolArgs.service_name;
      return new Promise((resolve) => {
        exec(`systemctl status ${serviceName}`, (error, stdout, stderr) => {
          const result = {
            jsonrpc: '2.0',
            result: {
              content: [
                {
                  type: "text",
                  text: error ? `Error: ${stderr}` : stdout
                }
              ]
            },
            id: requestId
          };
          resolve(result);
        });
      });
    }
  }
  
  // 方法不存在
  console.error(`Method not found: ${method}`);
  return {
    jsonrpc: '2.0',
    error: { code: -32601, message: 'Method not found' },
    id: requestId
  };
}
 
// 标准输入/输出模式的处理函数
async function handleStdioMode() {
  process.stdin.setEncoding('utf-8');
  process.stdin.on('data', async (data) => {
    const lines = data.toString().split('\n');
    
    for (const line of lines) {
      if (!line.trim()) continue;
      
      try {
        const request = JSON.parse(line);
        const response = await handleMcpRequest(request);
        
        // 发送响应到标准输出
        process.stdout.write(JSON.stringify(response) + '\n');
      } catch (error) {
        console.error('Error handling request:', error);
        const errorResponse = {
          jsonrpc: '2.0',
          error: { code: -32603, message: `Internal error: ${(error as Error).message}` },
          id: null
        };
        process.stdout.write(JSON.stringify(errorResponse) + '\n');
      }
    }
  });
  
  console.error('MCP Server running in stdio mode');
}
 
// HTTP接口
app.post('/mcp-server', async (req, res) => {
  try {
    const response = await handleMcpRequest(req.body);
    res.json(response);
  } catch (error) {
    console.error('Error handling request:', error);
    res.status(500).json({
      jsonrpc: '2.0',
      error: { code: -32603, message: 'Internal error' },
      id: req.body.id
    });
  }
});
 
// 启动服务器 - 支持HTTP和stdio两种模式
if (process.argv.includes('--stdio')) {
  handleStdioMode();
} else {
  const PORT = process.env.PORT || 3000;
  app.listen(PORT, () => {
    console.log(`MCP Server running on port ${PORT}`);
  });
}
 
export default app;

5.2 一个MCP Client管理多个MCP Server的实现

// multi_server_mcp_client.ts
import { spawn, ChildProcess } from 'child_process';
import fetch from 'node-fetch';
import { EventEmitter } from 'events';
import * as path from 'path';
 
// 定义连接类型
type StdioConnection = {
  command: string;
  args: string[];
  transport: 'stdio';
};
 
type SSEConnection = {
  url: string;
  transport: 'sse';
};
 
// MCP配置类型
type MCPConfig = Record<string, StdioConnection | SSEConnection>;
 
// 工具类型定义
type ToolParameter = {
  type: string;
  description?: string;
  properties?: Record<string, any>;
  required?: string[];
};
 
type Tool = {
  name: string;
  description: string;
  parameters: ToolParameter;
  returns?: any;
};
 
// 传输层基类
abstract class Transport extends EventEmitter {
  abstract connect(): Promise<void>;
  abstract send(request: any): Promise<any>;
  abstract disconnect(): Promise<void>;
}
 
// Stdio传输层实现
class StdioTransport extends Transport {
  private process: ChildProcess | null = null;
  private responseQueue: Array<{
    resolve: (value: any) => void;
    reject: (reason: any) => void;
    id: string;
  }> = [];
  private buffer: string = '';
  
  constructor(private command: string, private args: string[]) {
    super();
  }
  
  async connect(): Promise<void> {
    return new Promise((resolve, reject) => {
      try {
        this.process = spawn(this.command, this.args);
        
        this.process.stdout?.on('data', (data: Buffer) => {
          this.buffer += data.toString();
          this.processBuffer();
        });
        
        this.process.stderr?.on('data', (data: Buffer) => {
          console.error(`[StdioTransport] Error: ${data.toString()}`);
        });
        
        this.process.on('error', (error) => {
          console.error('[StdioTransport] Process error:', error);
          reject(error);
        });
        
        this.process.on('exit', (code) => {
          console.log(`[StdioTransport] Process exited with code ${code}`);
          if (code !== 0) {
            this.rejectAllPending(`Process exited with code ${code}`);
          }
        });
        
        // 给进程一些启动时间
        setTimeout(resolve, 100);
      } catch (error) {
        reject(error);
      }
    });
  }
  
  private processBuffer() {
    const lines = this.buffer.split('\n');
    
    // 保留最后一行,可能不完整
    this.buffer = lines.pop() || '';
    
    for (const line of lines) {
      if (!line.trim()) continue;
      
      try {
        const response = JSON.parse(line);
        const pending = this.responseQueue.find(p => p.id === response.id);
        
        if (pending) {
          const index = this.responseQueue.indexOf(pending);
          this.responseQueue.splice(index, 1);
          
          if (response.error) {
            pending.reject(response.error);
          } else {
            pending.resolve(response);
          }
        } else {
          console.warn('[StdioTransport] Received response with no matching request:', response);
        }
      } catch (error) {
        console.error('[StdioTransport] Error parsing response:', error, line);
      }
    }
  }
  
  async send(request: any): Promise<any> {
    if (!this.process || this.process.killed) {
      throw new Error('Process not running');
    }
    
    return new Promise((resolve, reject) => {
      this.responseQueue.push({
        resolve,
        reject,
        id: request.id
      });
      
      const requestStr = JSON.stringify(request) + '\n';
      this.process!.stdin!.write(requestStr);
    });
  }
  
  private rejectAllPending(reason: string) {
    for (const pending of this.responseQueue) {
      pending.reject(new Error(reason));
    }
    this.responseQueue = [];
  }
  
  async disconnect(): Promise<void> {
    if (this.process && !this.process.killed) {
      this.process.kill();
    }
  }
}
 
// HTTP/SSE传输层实现
class HttpTransport extends Transport {
  constructor(private url: string) {
    super();
  }
  
  async connect(): Promise<void> {
    // HTTP传输不需要特别的连接逻辑
  }
  
  async send(request: any): Promise<any> {
    const response = await fetch(this.url, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify(request)
    });
    
    if (!response.ok) {
      throw new Error(`HTTP error: ${response.status} ${response.statusText}`);
    }
    
    return await response.json();
  }
  
  async disconnect(): Promise<void> {
    // HTTP传输不需要特别的断开逻辑
  }
}
 
// 多服务器MCP客户端
class MultiServerMCPClient {
  private services: Map<string, { 
    transport: Transport, 
    tools: Tool[] 
  }> = new Map();
  private isConnected: boolean = false;
  
  constructor(private config: MCPConfig) {}
  
  async connect(): Promise<void> {
    // 创建和连接所有服务器客户端
    for (const [serviceName, serviceConfig] of Object.entries(this.config)) {
      try {
        // 创建传输层
        let transport: Transport;
        if (serviceConfig.transport === 'stdio') {
          transport = new StdioTransport(serviceConfig.command, serviceConfig.args);
        } else if (serviceConfig.transport === 'sse') {
          transport = new HttpTransport(serviceConfig.url);
        } else {
          throw new Error(`Unsupported transport: ${(serviceConfig as any).transport}`);
        }
        
        // 连接到服务
        await transport.connect();
        
        // 初始化服务
        const response = await transport.send({
          jsonrpc: '2.0',
          method: 'list_tools',
          params: {},
          id: `init_${serviceName}_${Date.now()}`
        });
        
        if (response.error) {
          throw new Error(`Initialization error: ${response.error.message}`);
        }
        
        // 保存服务信息和工具
        this.services.set(serviceName, {
          transport,
          tools: response.result?.tools || []
        });
        
        console.log(`Connected to MCP service: ${serviceName} with ${response.result?.tools?.length || 0} tools`);
      } catch (error) {
        console.error(`Failed to connect to service ${serviceName}:`, error);
        // 继续连接其他服务,不因一个服务失败而终止
      }
    }
    
    this.isConnected = true;
    console.log(`Connected to ${this.services.size} MCP services`);
  }
  
  getTools(): Tool[] {
    if (!this.isConnected) {
      throw new Error('Not connected to MCP services');
    }
    
    // 收集所有服务的工具,添加服务名前缀
    const allTools: Tool[] = [];
    
    for (const [serviceName, service] of this.services.entries()) {
      for (const tool of service.tools) {
        allTools.push({
          ...tool,
          name: `${serviceName}.${tool.name}`,
          description: `[${serviceName}] ${tool.description}`
        });
      }
    }
    
    return allTools;
  }
  
  async callTool(fullToolName: string, parameters: any): Promise<any> {
    if (!this.isConnected) {
      throw new Error('Not connected to MCP services');
    }
    
    // 解析服务名和工具名
    const [serviceName, toolName] = fullToolName.split('.');
    
    if (!serviceName || !toolName) {
      throw new Error(`Invalid tool name format: ${fullToolName}. Expected: service.tool`);
    }
    
    const service = this.services.get(serviceName);
    if (!service) {
      throw new Error(`Service not found: ${serviceName}`);
    }
    
    // 调用工具
    const response = await service.transport.send({
      jsonrpc: '2.0',
      method: 'call_tool',
      params: {
        name: toolName,
        arguments: parameters
      },
      id: `call_${serviceName}_${toolName}_${Date.now()}`
    });
    
    if (response.error) {
      throw new Error(`Tool call error: ${response.error.message}`);
    }
    
    return response.result;
  }
  
  async disconnect(): Promise<void> {
    // 断开所有服务连接
    for (const [serviceName, service] of this.services.entries()) {
      try {
        await service.transport.disconnect();
        console.log(`Disconnected from service: ${serviceName}`);
      } catch (error) {
        console.error(`Error disconnecting from ${serviceName}:`, error);
      }
    }
    
    this.services.clear();
    this.isConnected = false;
    console.log('Disconnected from all MCP services');
  }
}
export { MultiServerMCPClient, MCPConfig, Tool, using };

5.3 简易MCP Host实现

import express from 'express';
import path from 'path';
import { MultiServerMCPClient, MCPConfig } from './multi_server_mcp_client';
 
const app = express();
app.use(express.json());
app.use(express.static(path.join(__dirname, 'public')));
 
// 模拟LLM接口
class ChatModel {
  private config: { apiKey: string, model: string };
  
  constructor(config: { apiKey: string, model: string }) {
    this.config = config;
  }
  
  async chat(options: { messages: any[] }): Promise<any> {
    console.log('Sending chat request to LLM');
    console.log('Messages:', JSON.stringify(options.messages, null, 2));
    
    // 检查是否需要调用工具 - 实际应该由LLM API返回
    const lastMessage = options.messages[options.messages.length - 1];
    if (lastMessage.role === 'user') {
      const content = lastMessage.content.toLowerCase();
      
      if (content.includes('service') || content.includes('status')) {
        // 模拟LLM决定使用服务诊断工具
        return {
          id: 'resp_' + Date.now(),
          content: JSON.stringify({
            thoughts: "用户询问服务状态。我应该使用服务诊断工具获取信息。",
            tool: "logs.diagnose_service",
            parameters: {
              service_name: "nginx"
            }
          }),
          model: this.config.model
        };
      }
     }
    
    // 普通回复
    return {
      id: 'resp_' + Date.now(),
      content: '我已经处理了您的请求。您可以尝试询问关于日志、服务状态或文件内容的问题,我可以使用工具来帮助您。',
      model: this.config.model
    };
  }
}
 
// MCP服务配置
const MCP_CONFIG: MCPConfig = {
  "logs": {
    url: "http://localhost:3000/mcp",
    transport: "sse",
  },
  "filesystem": {
    command: "node",
    args: [path.join(__dirname, "mcp_server.js"), "--stdio"],
    transport: "stdio",
  }
};
 
// 初始化客户端
const mcpClient = new MultiServerMCPClient(MCP_CONFIG);
 
// 初始化模型
const model = new ChatModel({
  apiKey: process.env.AI_API_KEY || 'dummy-key',
  model: 'claude-3.7-sonnet'
});
 
let toolsMetadata: any[] = [];
 
// 连接到服务器
(async () => {
  try {
    await mcpClient.connect();
    toolsMetadata = mcpClient.getTools();
    // 在这种模式下,工具名称会添加服务器前缀(例如logs.search_logs)以避免命名冲突
    console.log('MCP Client connected successfully');
    console.log('Available tools:', JSON.stringify(toolsMetadata, null, 2));
  } catch (error) {
    console.error('Failed to connect MCP Client:', error);
  }
})();
 
// 处理聊天请求
app.post('/api/chat', async (req, res) => {
  try {
    const { message, conversation_id } = req.body;
    const newConversationId = conversation_id || Date.now().toString();
    
    // 从数据库或内存中获取历史消息
    let conversationHistory = await getConversationHistory(newConversationId) || [];
    
    // 构建带有工具调用能力的提示
    const systemPrompt = `You are an AI operations assistant with many tools. 
    When you need to use external tools, use the appropriate tool.
    Available Tools: ${JSON.stringify(toolsMetadata)}
    
    When you want to use external tool, respond with a JSON object containing:
    {
      "thoughts": "your reasoning",
      "tool": "service.tool_name",
      "parameters": { param1: value1, ... }
    }`;
    
    // 创建完整的消息历史,包括系统提示和新消息
    const messages = [
      { role: 'system', content: systemPrompt },
      ...conversationHistory,
      { role: 'user', content: message }
    ];
    
    // 开始agent循环,允许多次工具调用
    let maxIterations = 5; // 防止无限循环
    let finalResponse = null;
    let toolUsed = null;
    
    for (let i = 0; i < maxIterations; i++) {
      // 调用LLM
      const llmResponse = await model.chat({ messages });
      
      try {
        // 尝试解析JSON工具调用
        const toolCall = JSON.parse(llmResponse.content);
        
        if (toolCall.tool && toolCall.parameters) {
          console.log(`LLM requested tool (iteration ${i+1}): ${toolCall.tool}`);
          toolUsed = toolCall.tool;
          
          // 执行工具调用
          const toolResult = await mcpClient.callTool(
            toolCall.tool, 
            toolCall.parameters
          );
          
          // 提取工具返回的文本内容
          let resultText = '';
          if (toolResult.content && Array.isArray(toolResult.content)) {
            resultText = toolResult.content
              .filter((item) => item.type === 'text')
              .map((item) => item.text)
              .join('\n');
          } else {
            resultText = JSON.stringify(toolResult);
          }
          
          // 将LLM响应和工具结果添加到历史中
          messages.push({ role: 'assistant', content: llmResponse.content });
          messages.push({ role: 'system', content: `Tool result: ${resultText}` });
          
          // 继续循环,让LLM处理工具结果
          continue;
        }
        
        // 如果没有工具调用,这是最终响应
        finalResponse = llmResponse.content;
        break;
        
      } catch (parseError) {
        // 不是JSON,是普通回复,保存为最终响应
        finalResponse = llmResponse.content;
        break;
      }
    }
    
    // 保存对话历史
    const updatedHistory = [
      ...conversationHistory,
      { role: 'user', content: message },
      { role: 'assistant', content: finalResponse }
    ];
    await saveConversationHistory(newConversationId, updatedHistory);
    
    // 返回最终结果
    res.json({
      message: finalResponse,
      conversation_id: newConversationId,
      tool_used: toolUsed
    });
    
  } catch (error) {
    console.error('Chat error:', error);
    res.status(500).json({ error: 'Failed to process chat request' });
  }
});
 
// 辅助函数用于管理对话历史
async function getConversationHistory(conversationId) {
  // 实现从数据库或内存中获取对话历史
  // 简单实现可以使用内存缓存或Redis
  // 这里假设有一个全局对象存储对话历史
  return global.conversations[conversationId] || [];
}
 
async function saveConversationHistory(conversationId, history) {
  // 保存对话历史到数据库或内存
  if (!global.conversations) global.conversations = {};
  global.conversations[conversationId] = history;
}
 
// 获取工具列表API
app.get('/api/tools', (req, res) => {
  res.json({ tools: toolsMetadata });
});
 
// 启动服务器
const PORT = process.env.HOST_PORT || 8080;
app.listen(PORT, () => {
  console.log(`MCP Host running on port ${PORT}`);
});
 
// 确保在进程退出时断开MCP连接
process.on('exit', async () => {
  await mcpClient.disconnect();
});
 
process.on('SIGINT', async () => {
  await mcpClient.disconnect();
  process.exit();
});
 
export default app;

MCP与function call区别

Agent Tool 通常基于 Function Calling 实现。开发者只需按照 OpenAI 接口规范定义函数和参数,LLM 就能通过推理,自行决策是否调用这些预先编写的工具来完成特定需求

与之相比,MCP 需要构建一个独立的服务,并按照 MCP 协议实现特定的远程过程调用(RPC)方法。LLM 客户端需要在启动时发现该服务并建立连接,之后才能在对话过程中调用服务提供的功能。

结论:

无论是Function Call还是 MCP,其根本目的都是为了扩展大型语言模型的能力,能让大模型感知到外部的数据,然后通过用户提出的问题匹配到最合适的服务或工具,从而让模型能解决它本身不能解决的问题。

黑客/网络安全学习路线

对于从来没有接触过黑客/网络安全的同学,目前网络安全、信息安全也是计算机大学生毕业薪资相对较高的学科。

大白也帮大家准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

这也是耗费了大白近四个月的时间,吐血整理,文章非常非常长,觉得有用的话,希望粉丝朋友帮忙点个**「分享」「收藏」「在看」「赞」**

网络安全/渗透测试法律法规必知必会****

今天大白就帮想学黑客/网络安全技术的朋友们入门必须先了解法律法律。

【网络安全零基础入门必知必会】网络安全行业分析报告(01)

【网络安全零基础入门必知必会】什么是黑客、白客、红客、极客、脚本小子?(02)

【网络安全零基础入门必知必会】网络安全市场分类(03)

【网络安全零基础入门必知必会】常见的网站攻击方式(04)

【网络安全零基础入门必知必会】网络安全专业术语全面解析(05)

【网络安全入门必知必会】《中华人民共和国网络安全法》(06)

【网络安全零基础入门必知必会】《计算机信息系统安全保护条例》(07)

【网络安全零基础入门必知必会】《中国计算机信息网络国际联网管理暂行规定》(08)

【网络安全零基础入门必知必会】《计算机信息网络国际互联网安全保护管理办法》(09)

【网络安全零基础入门必知必会】《互联网信息服务管理办法》(10)

【网络安全零基础入门必知必会】《计算机信息系统安全专用产品检测和销售许可证管理办法》(11)

【网络安全零基础入门必知必会】《通信网络安全防护管理办法》(12)

【网络安全零基础入门必知必会】《中华人民共和国国家安全法》(13)

【网络安全零基础入门必知必会】《中华人民共和国数据安全法》(14)

【网络安全零基础入门必知必会】《中华人民共和国个人信息保护法》(15)

【网络安全零基础入门必知必会】《网络产品安全漏洞管理规定》(16)

网络安全/渗透测试linux入门必知必会

【网络安全零基础入门必知必会】什么是Linux?Linux系统的组成与版本?什么是命令(01)

【网络安全零基础入门必知必会】VMware下载安装,使用VMware新建虚拟机,远程管理工具(02)

【网络安全零基础入门必知必会】VMware常用操作指南(非常详细)零基础入门到精通,收藏这一篇就够了(03)

【网络安全零基础入门必知必会】CentOS7安装流程步骤教程(非常详细)零基入门到精通,收藏这一篇就够了(04)

【网络安全零基础入门必知必会】Linux系统目录结构详细介绍(05)

【网络安全零基础入门必知必会】Linux 命令大全(非常详细)零基础入门到精通,收藏这一篇就够了(06)

【网络安全零基础入门必知必会】linux安全加固(非常详细)零基础入门到精通,收藏这一篇就够了(07)

网络安全/渗透测试****计算机网络入门必知必会****

【网络安全零基础入门必知必会】TCP/IP协议深入解析(非常详细)零基础入门到精通,收藏这一篇就够了(01)

【网络安全零基础入门必知必会】什么是HTTP数据包&Http数据包分析(非常详细)零基础入门到精通,收藏这一篇就够了(02)

【网络安全零基础入门必知必会】计算机网络—子网划分、子网掩码和网关(非常详细)零基础入门到精通,收藏这一篇就够了(03)

网络安全/渗透测试入门之HTML入门必知必会

【网络安全零基础入门必知必会】什么是HTML&HTML基本结构&HTML基本使用(非常详细)零基础入门到精通,收藏这一篇就够了1

【网络安全零基础入门必知必会】VScode、PhpStorm的安装使用、Php的环境配置,零基础入门到精通,收藏这一篇就够了2

【网络安全零基础入门必知必会】HTML之编写登录和文件上传(非常详细)零基础入门到精通,收藏这一篇就够了3

网络安全/渗透测试入门之Javascript入门必知必会

【网络安全零基础入门必知必会】Javascript语法基础(非常详细)零基础入门到精通,收藏这一篇就够了(01)

【网络安全零基础入门必知必会】Javascript实现Post请求、Ajax请求、输出数据到页面、实现前进后退、文件上传(02)

网络安全/渗透测试入门之Shell入门必知必会

【网络安全零基础入门必知必会】Shell编程基础入门(非常详细)零基础入门到精通,收藏这一篇就够了(第七章)

网络安全/渗透测试入门之PHP入门必知必会

【网络安全零基础入门】PHP环境搭建、安装Apache、安装与配置MySQL(非常详细)零基础入门到精通,收藏这一篇就够(01)

【网络安全零基础入门】PHP基础语法(非常详细)零基础入门到精通,收藏这一篇就够了(02)

【网络安全零基础入门必知必会】PHP+Bootstrap实现表单校验功能、PHP+MYSQL实现简单的用户注册登录功能(03)

网络安全/渗透测试入门之MySQL入门必知必会

【网络安全零基础入门必知必会】MySQL数据库基础知识/安装(非常详细)零基础入门到精通,收藏这一篇就够了(01)

【网络安全零基础入门必知必会】SQL语言入门(非常详细)零基础入门到精通,收藏这一篇就够了(02)

【网络安全零基础入门必知必会】MySQL函数使用大全(非常详细)零基础入门到精通,收藏这一篇就够了(03)

【网络安全零基础入门必知必会】MySQL多表查询语法(非常详细)零基础入门到精通,收藏这一篇就够了(04)

****网络安全/渗透测试入门之Python入门必知必会

【网络安全零基础入门必知必会】之Python+Pycharm安装保姆级教程,Python环境配置使用指南,收藏这一篇就够了【1】

【网络安全零基础入门必知必会】之Python编程入门教程(非常详细)零基础入门到精通,收藏这一篇就够了(2)

python开发之手写第一个python程序

python开发笔记之变量

python基础语法特征

python开发数据类型

python开发笔记之程序交互

python入门教程之python开发学习笔记基本数据类型

python入门教程之python开发笔记之格式化输出

python入门教程之python开发笔记基本运算符

python入门教程python开发基本流程控制if … else

python入门教程之python开发笔记流程控制之循环

python入门之Pycharm开发工具的使用

python入门教程之python字符编码转换

python入门之python开发字符编码

python入门之python开发基本数据类型数字

python入门python开发基本数据类型字符串

python入门python开发基本数据类型列表

python入门python开发基本数据类型

python入门教程之python开发可变和不可变数据类型和hash

python入门教程python开发字典数据类型

python入门之python开发笔记基本数据类型集合

python开发之collections模块

python开发笔记之三元运算

【网络安全零基础入门必知必会】之10个python爬虫入门实例(非常详细)零基础入门到精通,收藏这一篇就够了(3)

****网络安全/渗透测试入门之SQL注入入门必知必会

【网络安全渗透测试零基础入门必知必会】之初识SQL注入(非常详细)零基础入门到精通,收藏这一篇就够了(1)

【网络安全渗透测试零基础入门必知必会】之SQL手工注入基础语法&工具介绍(2)

【网络安全渗透测试零基础入门必知必会】之SQL注入实战(非常详细)零基础入门到精通,收藏这一篇就够了(3)

【网络安全渗透测试零基础入门必知必会】之SQLmap安装&实战(非常详细)零基础入门到精通,收藏这一篇就够了(4)

【网络安全渗透测试零基础入门必知必会】之SQL防御(非常详细)零基础入门到精通,收藏这一篇就够了(4)

****网络安全/渗透测试入门之XSS攻击入门必知必会

【网络安全渗透测试零基础入门必知必会】之XSS攻击基本概念和原理介绍(非常详细)零基础入门到精通,收藏这一篇就够了(1)

网络安全渗透测试零基础入门必知必会】之XSS攻击获取用户cookie和用户密码(实战演示)零基础入门到精通收藏这一篇就够了(2)

【网络安全渗透测试零基础入门必知必会】之XSS攻击获取键盘记录(实战演示)零基础入门到精通收藏这一篇就够了(3)

【网络安全渗透测试零基础入门必知必会】之xss-platform平台的入门搭建(非常详细)零基础入门到精通,收藏这一篇就够了4

【网络安全渗透测试入门】之XSS漏洞检测、利用和防御机制XSS游戏(非常详细)零基础入门到精通,收藏这一篇就够了5

****网络安全/渗透测试入门文件上传攻击与防御入门必知必会

【网络安全渗透测试零基础入门必知必会】之什么是文件包含漏洞&分类(非常详细)零基础入门到精通,收藏这一篇就够了1

【网络安全渗透测试零基础入门必知必会】之cve实际漏洞案例解析(非常详细)零基础入门到精通, 收藏这一篇就够了2

【网络安全渗透测试零基础入门必知必会】之PHP伪协议精讲(文件包含漏洞)零基础入门到精通,收藏这一篇就够了3

【网络安全渗透测试零基础入门必知必会】之如何搭建 DVWA 靶场保姆级教程(非常详细)零基础入门到精通,收藏这一篇就够了4

【网络安全渗透测试零基础入门必知必会】之Web漏洞-文件包含漏洞超详细全解(附实例)5

【网络安全渗透测试零基础入门必知必会】之文件上传漏洞修复方案6

****网络安全/渗透测试入门CSRF渗透与防御必知必会

【网络安全渗透测试零基础入门必知必会】之CSRF漏洞概述和原理(非常详细)零基础入门到精通, 收藏这一篇就够了1

【网络安全渗透测试零基础入门必知必会】之CSRF攻击的危害&分类(非常详细)零基础入门到精通, 收藏这一篇就够了2

【网络安全渗透测试零基础入门必知必会】之XSS与CSRF的区别(非常详细)零基础入门到精通, 收藏这一篇就够了3

【网络安全渗透测试零基础入门必知必会】之CSRF漏洞挖掘与自动化工具(非常详细)零基础入门到精通,收藏这一篇就够了4

【网络安全渗透测试零基础入门必知必会】之CSRF请求伪造&Referer同源&置空&配合XSS&Token值校验&复用删除5

****网络安全/渗透测试入门SSRF渗透与防御必知必会

【网络安全渗透测试零基础入门必知必会】之SSRF漏洞概述及原理(非常详细)零基础入门到精通,收藏这一篇就够了 1

【网络安全渗透测试零基础入门必知必会】之SSRF相关函数和协议(非常详细)零基础入门到精通,收藏这一篇就够了2

【网络安全渗透测试零基础入门必知必会】之SSRF漏洞原理攻击与防御(非常详细)零基础入门到精通,收藏这一篇就够了3**
**

****网络安全/渗透测试入门XXE渗透与防御必知必会

【网络安全渗透测试零基础入门必知必会】之XML外部实体注入(非常详细)零基础入门到精通,收藏这一篇就够了1

网络安全渗透测试零基础入门必知必会】之XXE的攻击与危害(非常详细)零基础入门到精通,收藏这一篇就够了2

【网络安全渗透测试零基础入门必知必会】之XXE漏洞漏洞及利用方法解析(非常详细)零基础入门到精通,收藏这一篇就够了3

【网络安全渗透测试零基础入门必知必会】之微信XXE安全漏洞处理(非常详细)零基础入门到精通,收藏这一篇就够了4

****网络安全/渗透测试入门远程代码执行渗透与防御必知必会

【网络安全渗透测试零基础入门必知必会】之远程代码执行原理介绍(非常详细)零基础入门到精通,收藏这一篇就够了1

【网络安全零基础入门必知必会】之CVE-2021-4034漏洞原理解析(非常详细)零基础入门到精通,收藏这一篇就够了2

【网络安全零基础入门必知必会】之PHP远程命令执行与代码执行原理利用与常见绕过总结3

【网络安全零基础入门必知必会】之WEB安全渗透测试-pikachu&DVWA靶场搭建教程,零基础入门到精通,收藏这一篇就够了4

****网络安全/渗透测试入门反序列化渗透与防御必知必会

【网络安全零基础入门必知必会】之什么是PHP对象反序列化操作(非常详细)零基础入门到精通,收藏这一篇就够了1

【网络安全零基础渗透测试入门必知必会】之php反序列化漏洞原理解析、如何防御此漏洞?如何利用此漏洞?2

【网络安全渗透测试零基础入门必知必会】之Java 反序列化漏洞(非常详细)零基础入门到精通,收藏这一篇就够了3

【网络安全渗透测试零基础入门必知必会】之Java反序列化漏洞及实例解析(非常详细)零基础入门到精通,收藏这一篇就够了4

【网络安全渗透测试零基础入门必知必会】之CTF题目解析Java代码审计中的反序列化漏洞,以及其他漏洞的组合利用5

网络安全/渗透测试**入门逻辑漏洞必知必会**

【网络安全渗透测试零基础入门必知必会】之一文带你0基础挖到逻辑漏洞(非常详细)零基础入门到精通,收藏这一篇就够了

网络安全/渗透测试入门暴力猜解与防御必知必会

【网络安全渗透测试零基础入门必知必会】之密码安全概述(非常详细)零基础入门到精通,收藏这一篇就够了1

【网络安全渗透测试零基础入门必知必会】之什么样的密码是不安全的?(非常详细)零基础入门到精通,收藏这一篇就够了2

【网络安全渗透测试零基础入门必知必会】之密码猜解思路(非常详细)零基础入门到精通,收藏这一篇就够了

【网络安全渗透测试零基础入门必知必会】之利用Python暴力破解邻居家WiFi密码、压缩包密码,收藏这一篇就够了4

【网络安全渗透测试零基础入门必知必会】之BurpSuite密码爆破实例演示,零基础入门到精通,收藏这一篇就够了5

【网络安全渗透测试零基础入门必知必会】之Hydra密码爆破工具使用教程图文教程,零基础入门到精通,收藏这一篇就够了

【网络安全渗透测试零基础入门必知必会】之暴力破解medusa,零基础入门到精通,收藏这一篇就够了7

【网络安全渗透测试零基础入门必知必会】之Metasploit抓取密码,零基础入门到精通,收藏这一篇就够了8

Wfuzz:功能强大的web漏洞挖掘工具

****网络安全/渗透测试入门掌握Redis未授权访问漏洞必知必会

【网络安全渗透测试零基础入门必知必会】之Redis未授权访问漏洞,零基础入门到精通,收藏这一篇就够了

【网络安全渗透测试零基础入门必知必会】之Redis服务器被攻击后该如何安全加固,零基础入门到精通,收藏这一篇就够了**
**

网络安全/渗透测试入门掌握**ARP渗透与防御关必知必会**

【网络安全渗透测试零基础入门必知必会】之ARP攻击原理解析,零基础入门到精通,收藏这一篇就够了

【网络安全渗透测试零基础入门必知必会】之ARP流量分析,零基础入门到精通,收藏这一篇就够了

【网络安全渗透测试零基础入门必知必会】之ARP防御策略与实践指南,零基础入门到精通,收藏这一篇就够了

网络安全/渗透测试入门掌握系统权限提升渗透与防御关****必知必会

【网络安全渗透测试零基础入门必知必会】之Windows提权常用命令,零基础入门到精通,收藏这一篇就够了

【网络安全渗透测试零基础入门必知必会】之Windows权限提升实战,零基础入门到精通,收藏这一篇就够了

【网络安全渗透测试零基础入门必知必会】之linux 提权(非常详细)零基础入门到精通,收藏这一篇就够了

网络安全/渗透测试入门掌握Dos与DDos渗透与防御相关****必知必会

【网络安全渗透测试零基础入门必知必会】之DoS与DDoS攻击原理(非常详细)零基础入门到精通,收藏这一篇就够了

【网络安全渗透测试零基础入门必知必会】之Syn-Flood攻击原理解析(非常详细)零基础入门到精通,收藏这一篇就够了

【网络安全渗透测试零基础入门必知必会】之IP源地址欺骗与dos攻击,零基础入门到精通,收藏这一篇就够了

【网络安全渗透测试零基础入门必知必会】之SNMP放大攻击原理及实战演示,零基础入门到精通,收藏这一篇就够了

【网络安全渗透测试零基础入门必知必会】之NTP放大攻击原理,零基础入门到精通,收藏这一篇就够了

【网络安全渗透测试零基础入门必知必会】之什么是CC攻击?CC攻击怎么防御?,零基础入门到精通,收藏这一篇就够了

【网络安全渗透测试零基础入门必知必会】之如何防御DDOS的攻击?零基础入门到精通,收藏这一篇就够了

网络安全/渗透测试入门掌握无线网络安全渗透与防御相****必知必会

【网络安全渗透测试零基础入门必知必会】之Aircrack-ng详细使用安装教程,零基础入门到精通,收藏这一篇就够了

【网络安全渗透测试零基础入门必知必会】之aircrack-ng破解wifi密码(非常详细)零基础入门到精通,收藏这一篇就够了

【网络安全渗透测试零基础入门必知必会】之WEB渗透近源攻击,零基础入门到精通,收藏这一篇就够了

【网络安全渗透测试零基础入门必知必会】之无线渗透|Wi-Fi渗透思路,零基础入门到精通,收藏这一篇就够了

【网络安全渗透测试零基础入门必知必会】之渗透WEP新思路Hirte原理解析,零基础入门到精通,收藏这一篇就够了

【网络安全渗透测试零基础入门必知必会】之WPS的漏洞原理解析,零基础入门到精通,收藏这一篇就够了

网络安全/渗透测试入门掌握木马免杀问题与防御********必知必会

【网络安全渗透测试零基础入门必知必会】之Metasploit – 木马生成原理和方法,零基础入门到精通,收藏这篇就够了

【网络安全渗透测试零基础入门必知必会】之MSF使用教程永恒之蓝漏洞扫描与利用,收藏这一篇就够了

网络安全/渗透测试入门掌握Vulnhub靶场实战********必知必会

【网络安全渗透测试零基础入门必知必会】之Vulnhub靶机Prime使用指南,零基础入门到精通,收藏这一篇就够了

【网络安全渗透测试零基础入门必知必会】之Vulnhub靶场Breach1.0解析,零基础入门到精通,收藏这一篇就够了

【网络安全渗透测试零基础入门必知必会】之vulnhub靶场之DC-9,零基础入门到精通,收藏这一篇就够了

【网络安全渗透测试零基础入门必知必会】之Vulnhub靶机Kioptrix level-4 多种姿势渗透详解,收藏这一篇就够了

【网络安全渗透测试零基础入门必知必会】之Vulnhub靶场PWNOS: 2.0 多种渗透方法,收藏这一篇就够了

网络安全/渗透测试入门掌握社会工程学必知必会

【网络安全渗透测试零基础入门必知必会】之什么是社会工程学?定义、类型、攻击技术,收藏这一篇就够了

【网络安全渗透测试零基础入门必知必会】之社会工程学之香农-韦弗模式,收藏这一篇就够了

【网络安全渗透测试零基础入门必知必会】之社工学smcr通信模型,收藏这一篇就够了

【网络安全渗透测试零基础入门必知必会】之社会工程学之社工步骤整理(附相应工具下载)收藏这一篇就够了

网络安全/渗透测试入门掌握********渗透测试工具使用******必知必会**

2024版最新Kali Linux操作系统安装使用教程(非常详细)零基础入门到精通,收藏这一篇就够了

【网络安全渗透测试零基础入门必知必会】之渗透测试工具大全之Nmap安装使用命令指南,零基础入门到精通,收藏这一篇就够了

2024版最新AWVS安装使用教程(非常详细)零基础入门到精通,收藏这一篇就够了

2024版最新burpsuite安装使用教程(非常详细)零基础入门到精通,收藏这一篇就够了

2024版最新owasp_zap安装使用教程(非常详细)零基础入门到精通,收藏这一篇就够了

2024版最新Sqlmap安装使用教程(非常详细)零基础入门到精通,收藏这一篇就够了

2024版最新Metasploit安装使用教程(非常详细)零基础入门到精通,收藏这一篇就够了

2024版最新Nessus下载安装激活使用教程(非常详细)零基础入门到精通,收藏这一篇就够了

2024版最新Wireshark安装使用教程(非常详细)零基础入门到精通,收藏这一篇就够了

觉得有用的话,希望粉丝朋友帮大白点个**「分享」「收藏」「在看」「赞」**

黑客/网络安全学习包

资料目录

  1. 成长路线图&学习规划

  2. 配套视频教程

  3. SRC&黑客文籍

  4. 护网行动资料

  5. 黑客必读书单

  6. 面试题合集

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

1.成长路线图&学习规划

要学习一门新的技术,作为新手一定要先学习成长路线图方向不对,努力白费

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。


因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

2.视频教程

很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩


因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

3.SRC&黑客文籍

大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录

SRC技术文籍:

黑客资料由于是敏感资源,这里不能直接展示哦!

4.护网行动资料

其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!

5.黑客必读书单

**

**

6.面试题合集

当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。

更多内容为防止和谐,可以扫描获取~

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

****************************CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享 ```

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐