DaemonService/ipsechelper.cpp
筱傑 8451ed1a2f
修复黑名单添加失败的bug
任意端口参数为0而不是any
2019-02-22 11:31:33 +08:00

54 lines
1.3 KiB
C++

#include "ipsechelper.h"
#include <QProcess>
#include <QStringList>
void IpsecHelper::addItemToWhitelist(QString ip, int port)
{
ExeCmd("add", "whitelist", ip, port);
}
void IpsecHelper::removeItemFromWhiteList(QString ip, int port)
{
ExeCmd("delete", "whitelist", ip, port);
}
void IpsecHelper::addItemToBlackList(QString ip, int port)
{
ExeCmd("add", "blacklist", ip, port);
}
void IpsecHelper::addItemToBlackList(QString ip)
{
ExeCmd("add", "blacklist", ip);
}
void IpsecHelper::removeItemFromBlackList(QString ip, int port)
{
ExeCmd("delete", "blacklist", ip, port);
}
void IpsecHelper::removeItemFromBlackList(QString ip)
{
ExeCmd("delete", "blacklist", ip);
}
void IpsecHelper::addItemToBlackList(int port)
{
ExeCmd("add", "blacklist", "any", port);
}
void IpsecHelper::ExeCmd(QString cmd, QString filterlist, QString srcaddr, int port)
{
QProcess p(nullptr);
p.start("netsh",
QStringList() << "ipsec"
<< "static"
<< cmd
<< "filter"
<< ("filterlist=" + filterlist)
<< ("srcaddr=" + srcaddr)
<< "dstaddr=me"
<< "protocol=tcp"
<< "mirrored=yes"
<< QString("dstport=%1").arg(port)
);
p.waitForStarted();
p.waitForFinished();
}