mirror of
https://github.com/Jerryplusy/AI-powered-switches.git
synced 2025-07-04 05:09:19 +00:00
优化vlan匹配算法
This commit is contained in:
parent
093c7423e5
commit
223d43f0d9
@ -44,49 +44,63 @@ const ConfigPage = () => {
|
|||||||
setDevices(config.devices || []);
|
setDevices(config.devices || []);
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const generateRealisticConfig = (command) => {
|
const generateRealisticConfig = (command, devices = []) => {
|
||||||
const timestamp = new Date().toLocaleString();
|
const timestamp = new Date().toLocaleString();
|
||||||
let config = `! 配置生成于 ${timestamp}\n`;
|
let config = `! 配置生成于 ${timestamp}\n`;
|
||||||
|
const cmd = command.toLowerCase();
|
||||||
if (command.includes('VLAN')) {
|
// VLAN 配置
|
||||||
const vlanId = command.match(/VLAN\s*(\d+)/)?.[1] || '10';
|
if (cmd.includes('vlan')) {
|
||||||
|
const vlanIdMatch = command.match(/vlan\s*(\d+)/i);
|
||||||
|
const vlanId = vlanIdMatch?.[1] || '10';
|
||||||
|
const isMgmt = cmd.includes('管理') || cmd.includes('mgmt');
|
||||||
config +=
|
config +=
|
||||||
`vlan ${vlanId}\n` +
|
`vlan ${vlanId}\n` +
|
||||||
` name ${command.includes('管理') ? 'MGMT' : 'USER'}_VLAN\n` +
|
` name ${isMgmt ? 'MGMT' : 'USER'}_VLAN\n` +
|
||||||
` exit\n` +
|
` exit\n` +
|
||||||
`interface Vlan${vlanId}\n` +
|
`interface Vlan${vlanId}\n` +
|
||||||
` description ${command.includes('管理') ? 'Management' : 'User'} VLAN\n` +
|
` description ${isMgmt ? 'Management VLAN' : 'User VLAN'}\n` +
|
||||||
` ip address 192.168.${vlanId}.1 255.255.255.0\n` +
|
` ip address 192.168.${vlanId}.1 255.255.255.0\n` +
|
||||||
` exit\n`;
|
` exit\n`;
|
||||||
}
|
}
|
||||||
|
// SSH 配置
|
||||||
if (command.includes('SSH') || command.includes('安全')) {
|
if (cmd.includes('ssh') || cmd.includes('安全') || cmd.includes('登录')) {
|
||||||
|
const password = Math.random().toString(36).slice(2, 10);
|
||||||
config +=
|
config +=
|
||||||
`ip ssh server\n` +
|
`ip ssh server\n` +
|
||||||
`ip ssh version 2\n` +
|
`ip ssh version 2\n` +
|
||||||
`username admin privilege 15 secret 0 ${Math.random().toString(36).slice(2, 10)}\n` +
|
`username admin privilege 15 secret 0 ${password}\n` +
|
||||||
`line vty 0 4\n` +
|
`line vty 0 4\n` +
|
||||||
` transport input ssh\n` +
|
` transport input ssh\n` +
|
||||||
` login local\n` +
|
` login local\n` +
|
||||||
` exit\n`;
|
` exit\n`;
|
||||||
}
|
}
|
||||||
|
// 端口配置
|
||||||
if (command.includes('端口') || command.includes('接口')) {
|
if (cmd.includes('端口') || cmd.includes('接口') || cmd.includes('port')) {
|
||||||
const port = command.match(/端口\s*(\d+)/)?.[1] || '1';
|
const portMatch = command.match(/端口\s*(\d+)/i) || command.match(/port\s*(\d+)/i);
|
||||||
|
const port = portMatch?.[1] || '1';
|
||||||
|
const isTrunk = cmd.includes('trunk');
|
||||||
|
const isAccess = cmd.includes('access') || !isTrunk;
|
||||||
|
const desc = cmd.includes('上联') || cmd.includes('uplink') ? 'Uplink_Port' : 'Access_Port';
|
||||||
|
const vlanId = '10';
|
||||||
config +=
|
config +=
|
||||||
`interface GigabitEthernet0/${port}\n` +
|
`interface GigabitEthernet0/${port}\n` +
|
||||||
` description ${command.includes('接入') ? 'Access_Port' : 'Uplink_Port'}\n` +
|
` description ${desc}\n` +
|
||||||
` switchport mode ${command.includes('trunk') ? 'trunk' : 'access'}\n` +
|
` switchport mode ${isTrunk ? 'trunk' : 'access'}\n` +
|
||||||
` ${command.includes('trunk') ? 'switchport trunk allowed vlan all' : 'switchport access vlan 10'}\n` +
|
` ${isTrunk ? 'switchport trunk allowed vlan all' : `switchport access vlan ${vlanId}`}\n` +
|
||||||
` no shutdown\n` +
|
` no shutdown\n` +
|
||||||
` exit\n`;
|
` exit\n`;
|
||||||
}
|
}
|
||||||
|
// ACL 配置
|
||||||
if (command.includes('ACL') || command.includes('访问控制')) {
|
if (cmd.includes('acl') || cmd.includes('访问控制') || cmd.includes('防火墙')) {
|
||||||
|
let targetIP = '192.168.10.10';
|
||||||
|
if (devices.length > 0) {
|
||||||
|
const randomDevice = devices[Math.floor(Math.random() * devices.length)];
|
||||||
|
targetIP = randomDevice.ip;
|
||||||
|
}
|
||||||
config +=
|
config +=
|
||||||
`ip access-list extended PROTECT_SERVERS\n` +
|
`ip access-list extended PROTECT_SERVERS\n` +
|
||||||
` permit tcp any host 192.168.10.10 eq 22\n` +
|
` permit tcp any host ${targetIP} eq 22\n` +
|
||||||
` permit tcp any host 192.168.10.10 eq 80\n` +
|
` permit tcp any host ${targetIP} eq 80\n` +
|
||||||
` deny ip any any\n` +
|
` deny ip any any\n` +
|
||||||
` exit\n` +
|
` exit\n` +
|
||||||
`interface Vlan10\n` +
|
`interface Vlan10\n` +
|
||||||
@ -94,6 +108,9 @@ const ConfigPage = () => {
|
|||||||
` exit\n`;
|
` exit\n`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (config.trim() === `! 配置生成于 ${timestamp}`) {
|
||||||
|
config += '! 当前命令未识别到任何可配置项目\n';
|
||||||
|
}
|
||||||
return { config };
|
return { config };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -36,9 +36,9 @@ const ScanPage = () => {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const fetchLocalInfo = async () => {
|
const fetchLocalInfo = async () => {
|
||||||
setLocalIp('172.17.99.208');
|
setLocalIp('192.168.1.100');
|
||||||
if (!subnet) {
|
if (!subnet) {
|
||||||
const ipParts = '172.17.99.208'.split('.');
|
const ipParts = '192.168.1.0'.split('.');
|
||||||
setSubnet(`${ipParts[0]}.${ipParts[1]}.${ipParts[2]}.0/24`);
|
setSubnet(`${ipParts[0]}.${ipParts[1]}.${ipParts[2]}.0/24`);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user