1. 개요
네트워크 관리를 할 때, 여러 IP 주소에 대해 포트 포워딩 설정을 수동으로 추가하는 것은 시간이 많이 소요되는 작업일 수 있습니다. 특히 대규모 네트워크 환경에서는 이런 작업이 더욱 번거롭습니다. 이러한 문제를 해결하기 위해 JavaScript의 비동기 함수인 async/await를 활용하여 네트워크 포트 포워딩을 자동화하는 방법을 소개하고자 합니다. 이 글에서는 비동기적으로 네트워크 요청을 처리하는 방법과 이를 사용해 여러 IP에 대한 포트 포워딩을 간편하게 설정하는 방법에 대해 설명합니다.
2. 내용
비동기 함수는 네트워크 요청과 같이 시간이 오래 걸리는 작업을 수행할 때 유용하게 사용됩니다. async/await는 비동기 작업을 마치 동기 작업처럼 쉽게 작성할 수 있도록 도와줍니다.
JavaScript의 fetch API를 사용하면 HTTP 요청을 보낼 수 있는데, 이를 await 키워드와 함께 사용하여 응답이 올 때까지 기다리는 방식으로 비동기 처리를 할 수 있습니다. 이러한 접근 방식은 코드의 가독성을 높이고, 네트워크 오류를 효과적으로 처리할 수 있게 해줍니다.
네트워크 관리자들이 자주 수행하는 작업 중 하나가 포트 포워딩입니다. 포트 포워딩은 외부에서 들어오는 요청을 특정 내부 네트워크 장치로 전달하는 설정으로, 원격 데스크탑 프로토콜(RDP)과 같은 특정 서비스를 사용하는 경우에 필수적입니다. 수십 개의 IP에 대해 각각 포트 포워딩을 설정해야 한다면, 이를 수동으로 하는 것은 매우 비효율적입니다. 이런 상황에서, 스크립트를 사용하여 자동화하면 훨씬 효율적으로 작업을 수행할 수 있습니다.
3. 코드
다음은 async/await와 fetch를 사용하여 여러 IP 주소에 대해 포트 포워딩을 자동으로 설정하는 코드입니다.
async function sendPostRequest(url, body) {
try {
const response = await fetch(url, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(body)
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
console.log('Response from server:', data);
} catch (error) {
console.error('Error:', error);
}
}
// 여러 IP에 대한 포트 포워딩 설정을 자동으로 추가
const ipAddresses = [
{ip:"192.168.1.40"}
,{ip:"192.168.1.166"}
,{ip:"192.168.1.173"}
,{ip:"192.168.1.171"}
,{ip:"192.168.1.170"}
,{ip:"192.168.1.146"}
,{ip:"192.168.1.162"}
,{ip:"192.168.1.156"}
,{ip:"192.168.1.154"}
,{ip:"192.168.1.161"}
,{ip:"192.168.1.155"}
,{ip:"192.168.1.169"}
,{ip:"192.168.1.158"}
,{ip:"192.168.1.163"}
,{ip:"192.168.1.165"}
,{ip:"192.168.1.160"}
,{ip:"192.168.1.164"}
,{ip:"192.168.1.168"}
,{ip:"192.168.1.157"}
,{ip:"192.168.1.172"}
,{ip:"192.168.1.151"}
,{ip:"192.168.1.145"}
,{ip:"192.168.1.167"}
,{ip:"192.168.1.149"}
,{ip:"192.168.1.159"}
,{ip:"192.168.1.144"}
,{ip:"192.168.1.148"}
,{ip:"192.168.1.150"}
,{ip:"192.168.1.141"}
,{ip:"192.168.1.142"}
,{ip:"192.168.1.143"}
,{ip:"192.168.1.147"}
,{ip:"192.168.1.153"}
,{ip:"192.168.1.175"}
,{ip:"192.168.1.174"}
,{ip:"192.168.1.188"}
,{ip:"192.168.1.152"}
,{ip:"192.168.1.176"}
,{ip:"192.168.1.184"}
,{ip:"192.168.1.193"}
,{ip:"192.168.1.183"}
,{ip:"192.168.1.179"}
,{ip:"192.168.1.194"}
,{ip:"192.168.1.191"}
,{ip:"192.168.1.180"}
,{ip:"192.168.1.190"}
,{ip:"192.168.1.178"}
,{ip:"192.168.1.182"}
,{ip:"192.168.1.189"}
,{ip:"192.168.1.177"}
,{ip:"192.168.1.187"}
,{ip:"192.168.1.186"}
,{ip:"192.168.1.181"}
,{ip:"192.168.1.192"}
,{ip:"192.168.1.185"}
,{ip:"192.168.1.195"}
,{ip:"192.168.1.197"}
,{ip:"192.168.1.196"}
,{ip:"192.168.1.205"}
,{ip:"192.168.1.204"}
,{ip:"192.168.1.208"}
,{ip:"192.168.1.202"}
,{ip:"192.168.0.155"}
,{ip:"192.168.1.213"}
,{ip:"192.168.1.203"}
,{ip:"192.168.1.200"}
,{ip:"192.168.1.206"}
,{ip:"192.168.1.201"}
,{ip:"192.168.1.217"}
,{ip:"192.168.1.198"}
,{ip:"192.168.1.216"}
,{ip:"192.168.1.199"}
,{ip:"192.168.1.218"}
,{ip:"192.168.1.223"}
,{ip:"192.168.1.207"}
,{ip:"192.168.1.212"}
,{ip:"192.168.1.211"}
,{ip:"192.168.1.214"}
,{ip:"192.168.1.219"}
,{ip:"192.168.1.209"}
,{ip:"192.168.1.210"}
,{ip:"192.168.1.226"}
,{ip:"192.168.1.215"}
,{ip:"192.168.1.230"}
,{ip:"192.168.1.224"}
,{ip:"192.168.1.222"}
,{ip:"192.168.1.221"}
,{ip:"192.168.1.228"}
,{ip:"192.168.1.220"}
,{ip:"192.168.1.225"}
,{ip:"192.168.1.227"}
,{ip:"192.168.1.232"}
,{ip:"192.168.1.229"}
,{ip:"192.168.1.236"}
,{ip:"192.168.1.234"}
,{ip:"192.168.1.235"}
,{ip:"192.168.1.231"}
,{ip:"192.168.1.242"}
,{ip:"192.168.1.241"}
,{ip:"192.168.1.233"}
,{ip:"192.168.1.240"}
,{ip:"192.168.1.237"}
,{ip:"192.168.1.243"}
,{ip:"192.168.1.238"}
,{ip:"192.168.1.245"}
,{ip:"192.168.1.239"}
,{ip:"192.168.1.246"}
,{ip:"192.168.1.248"}
,{ip:"192.168.1.244"}
,{ip:"192.168.1.247"}
// ...추가 IP 주소와 포트 설정
];
let port = 10000;
ipAddresses.forEach(({ ip }) => {
sendPostRequest('http://192.168.0.1/cgi/service.cgi', {
"method": "portforward/add",
"params": {
"name": `${ip}-RDP`,
"active": true,
"protocol": "tcp",
"target": ip,
"src": { "start": `${port}`, "end": `${port}` },
"dst": { "start": 3389, "end": 3389 }
}
})
port++;
});
코드 설명
- sendPostRequest 함수는 비동기적으로 POST 요청을 보냅니다. fetch API를 사용하여 요청을 보내고 응답을 처리하며, 오류가 발생할 경우 이를 예외로 처리합니다.
- ipAddresses 배열에는 여러 IP 주소와 해당 포트 번호가 포함되어 있습니다. 이 배열을 순회하며 각 IP에 대한 포트 포워딩 규칙을 설정합니다.
- forEach 메서드를 사용하여 각 IP와 포트에 대해 sendPostRequest를 호출합니다. 포워딩 규칙은 API 요청 본문에 JSON 형식으로 작성됩니다.
4. 결론
이 글에서는 JavaScript의 비동기 함수와 fetch API를 사용하여 포트 포워딩 작업을 자동화하는 방법을 살펴보았습니다. 이러한 접근 방식은 네트워크 관리의 효율성을 크게 향상시킬 수 있으며, 특히 대규모 네트워크 환경에서 매우 유용합니다. 자동화를 통해 시간을 절약하고, 인적 오류를 줄이며, 더 일관된 네트워크 설정을 유지할 수 있습니다. 네트워크 관리 작업을 더 쉽게 하고 싶은 분들께 이 방법이 도움이 되길 바랍니다. 질문이 있거나 추가적인 정보가 필요하다면 언제든지 댓글로 남겨주세요!
'Programming > 기본 (Baisc)' 카테고리의 다른 글
[LINUX/리눅스] CensysInspect 보안업체 UA 대상 IP 차단 (0) | 2024.12.05 |
---|---|
[NCAT][VPC][AWS] AWS RDS VPC Private IP 원격 접속 방법 (0) | 2024.07.13 |
[APM/제니퍼,스카우터 등] Class Redefine 으로 인한 장애현상 (0) | 2024.06.27 |
[톰캣/AJP] X-Requested-With 헤더 상이한 현상 (0) | 2024.06.18 |
[오라클/Oracle] RecoverableException 리눅스 Random vs URandom 차이 (0) | 2024.06.17 |