我正在尝试通过另一个VM将NSG添加到Azure虚拟机中,并且我已经编写了这段代码,但它显示了此错误:
{ Error: read ECONNRESET
at TCP.onStreamRead (internal/stream_base_commons.js:111:27) errno: 'ECONNRESET', code: 'ECONNRESET', syscall: 'read' }
其原因可能是什么,如何解决?
const fs = require('fs');
let SFWConf = JSON.parse(fs.readFileSync("config/configFw.json"));
//const logger = require(CONSTANTS.SERVICES_PATH + "/logger.js")(module);
const getExtIP = require('external-ip')();
const request = require("request");
var hash = new Array();
var addIP = function (data, callback) {
if (SFWConf.smartFW === true) {
var dataReqIp = data.reqIP;
var portToAdd = data.port;
if (isPrivateIP(dataReqIp)) {
getExternalIP(function (iptoadd) {
if (iptoadd) {
callEc2InstanceToAddIp(iptoadd, portToAdd, callback);
} else {
callback(false);
}
});
} else {
iptoadd = dataReqIp;
callEc2InstanceToAddIp(iptoadd, portToAdd, callback);
}
} else {
callback(true);
}
};
function callEc2InstanceToAddIp(iptoadd, portToAdd, callback) {
if (hash[iptoadd]) {
if (hash[iptoadd].indexOf(portToAdd) == -1)
hash[iptoadd].push(portToAdd);
} else {
hash[iptoadd] = [portToAdd];
}
let reqBody = {
"properties": {
"securityRules": [
{
"name": "rule1",
"properties": {
"protocol": "tcp",
"sourceAddressPrefix": [iptoadd],
"destinationAddressPrefix": "*",
"access": "Allow",
"destinationPortRange": "80",
"sourcePortRange": portToAdd,
"priority": 130,
"direction": "Inbound"
}
}
]
},
"location": "West India"
}
restPost(reqBody, "PUT", (response) => {
logger.info("Response for adding rule=>" + JSON.stringify(response));
logger.info(hash);
if (response["result"] == true) {
callback(true);
} else {
callback(false);
}
});
}
var deleteIP = function (ip, callback) {
if (isPrivateIP(ip)) {
getExternalIP(function (iptodel) {
if (iptodel) {
callEc2InstanceToDelIp(iptodel, callback);
} else {
callback(false);
}
});
} else {
callEc2InstanceToDelIp(ip, callback);
}
};
function callEc2InstanceToDelIp(ip, callback) {
if (SFWConf.smartFW && hash[ip]) {
for (let i = 0; i < hash[ip].length; i++) {
let reqBody = {
}
restPost(reqBody, "DELETE", (response) => {
logger.info("Response for removing rule=>" + JSON.stringify(response));
if (response["result"] == true) {
logger.info("removed=" + ip + "-" + hash[ip][i]);
} else {
logger.info("Could not remove=" + ip + "-" + hash[ip][i]);
}
});
logger.info(hash[ip]);
if (i == (hash[ip].length - 1)) {
callback(true);
}
}
} else {
callback(true);
}
}
function restPost(req, method, callback) {
let subscriptionId = "324d5958-9c32-46a5-a6ec-03b8d7d33a10";
let resourceGroupName = "LC-AD";
let networkSecurityGroupName = "LC-API-Calls-test-nsg";
let host = SFWConf.hostAzure;
let path = `/${subscriptionId}/resourceGroups/${resourceGroupName}/providers/Microsoft.Network/networkSecurityGroups/${networkSecurityGroupName}?api-version=2017-10-01`;
let postheaders = {
"Content-Type": "application/json"
};
let optionspost = {
url: "http://" + host + path,
json: true,
method: method == "PUT" ? "PUT" : "DELETE",
headers: postheaders,
body: req
};
logger.info("post options=" + JSON.stringify(optionspost));
logger.info("req body=" + JSON.stringify(req));
request(optionspost, function (err, res, body) {
if (err) {
logger.error(err);
callback({ result: false, message: err }); return;
}
logger.info("Status code->" + res.statusCode);
// 200 means the operation was successful
if (res.statusCode == 200 || res.statusCode == 201) {
console.log(res.statusCode);
callback({ result: true });
} else {
logger.error(body);
callback({ result: false, message: body });
}
});
}
function isPrivateIP(ip) {
var parts = ip.split('.');
return parts[0] === '10' ||
(parts[0] === '172' && (parseInt(parts[1], 10) >= 16 && parseInt(parts[1], 10) <= 31)) ||
(parts[0] === '192' && parts[1] === '168') ||
(ip === "127.0.0.1");
}
function getExternalIP(cb) {
getExtIP(function (err, extip) {
if (err) {
// every service in the list has failed
cb(false);
} else {
cb(extip);
}
});
}
module.exports = {
addIP: addIP,
deleteIP: deleteIP
};
addIP({ reqIP: "104.211.136.223", port: "2222" }, function (res) {
console.log(res);
});