Di Habr sudah ada beberapa catatan tentang otomatisasi Kaspersky Security Center (KSC)
Di sini dan di sini
Hari ini, saya sarankan menyelam sedikit lebih dalam dan pindah ke tingkat yang baru. Gunakan: KSC Open API untuk Kaspersky Security Center 10+.
Untuk memantau status, distribusi workstation baru ke dalam grup, saya harus menggunakan Management Console untuk menghasilkan laporan, ia memiliki fungsionalitas yang luas, tetapi kecepatan kerjanya jauh dari yang diinginkan.
Dan kemunculan dukungan untuk Open API seperti menghirup udara segar, dan segera diputuskan untuk menggunakan solusi ini, dan seperti biasa, perpustakaan ditulis dalam bahasa pemrograman favorit Go yang memungkinkan akses ke server KSC menggunakan API yang disediakannya.
Untuk menggunakan paket dalam proyek kami, seperti biasa, kami perlu mendapatkannya:
go get -u github.com/pixfid/go-ksc/kaspersky
Impor paket ke proyek yang dibuat.
import (
"github.com/pixfid/go-ksc/kaspersky"
)
Kami membuat klien baru untuk bekerja dengan server KSC
func main() {
ctx := context.Background()
cfg := kaspersky.Config {
Username: "login",
Password: "password",
Server: fmt.Sprintf(`https://%s:%s`, "ip", "port"),
}
client := kaspersky.New(cfg)
client.KSCAuth(ctx)
}
Otorisasi sederhana, POST
permintaan titik akhir /api/v1.0/login
, dengan pengaturan header permintaan:
Authorization
: KSCBasic user=base64(login),pass=base64(pass)
X-KSC-VServer
: x
Content-Length
:2
Jika berhasil, server akan kembali: {}
, , accessor
, requestId
.
:
\ , , github.
:
func GetAllGroups(ctx context.Context, client *kaspersky.Client) *FullGroupsInfos {
groups := &FullGroupsInfos{} // .
groupParam := kaspersky.HGParams{
WstrFilter: `
(&
(!"KLGRP_CHLDHST_CNT" = 0)
(!"grp_from_unassigned" = true)
)`,
VecFieldsToReturn: []string{
"id",
"name",
"grp_full_name",
"creationDate",
"KLGRP_CHLDHST_CNT",
"KLSRV_HSTSTAT_CRITICAL",
"KLSRV_HSTSTAT_WARNING",
},
PParams: kaspersky.PParams{
KlsrvhSlaveRecDepth: 0,
KlgrpFindFromCurVsOnly: true,
},
LMaxLifeTime: 100,
}
accessor, _, _ := client.HostGroup.FindGroups(ctx, groupParam) //
count, _, _ := client.ChunkAccessor.GetItemsCount(ctx, accessor.StrAccessor) //
_, _ = client.ChunkAccessor.GetItemsChunk(ctx, kaspersky.ItemsChunkParams{
StrAccessor: accessor.StrAccessor,
NStart: 0,
NCount: count.Int,
} , groups) //
client.ChunkAccessor.Release(ctx, accessor.StrAccessor) //
return groups
}
, API []byte
, inteface{}
.
:
{
"pChunk" : {
"KLCSP_ITERATOR_ARRAY" : [
{
"type" : "params",
"value" : {
"KLGRP_CHLDHST_CNT" : 1,
"creationDate" : {
"type" : "datetime",
"value" : "2020-03-13T18:48:43Z"
},
"grp_full_name" : " /Broken/",
"id" : 160,
"name" : "Broken"
}
}
]
},
"PxgRetVal" : 1
}
:
ts, _, _ := client.Tasks.GetAllTasksOfHost(ctx, "domain.name", "d7f6c44c-6743-416d-81b3-343e464f1ec9")
d7f6c44c-6743-416d-81b3-343e464f1ec9 , KSC
:
{ "PxgRetVal": ["101", "117", "118", "192"] }
(, , ) .
func (ts *Tasks) SuspendTask(ctx context.Context, strTask string) ([]byte, error)
func (ts *Tasks) ResumeTask(ctx context.Context, strTask string) ([]byte, error)
func (ts *Tasks) RunTask(ctx context.Context, strTask string) ([]byte, error)
func (ts *Tasks) DeleteTask(ctx context.Context, strTask string) ([]byte, error)
API, KSC 10, KSC 12.
GitHub
.
C.