Skip to content

Commit e6123f2

Browse files
committed
fix(tencent):DescribeInstances support paging, fixes #1
1 parent 0da41d1 commit e6123f2

3 files changed

Lines changed: 76 additions & 51 deletions

File tree

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
# cloudtoolkit
22
Cloud Penetration Testing Toolkit
33

4+
## Usage
5+
Reference [Wiki](https://github.com/404tk/cloudtoolkit/wiki)
6+
47
## Capability overview
58

69
| Providers | Payload | Supported |

pkg/providers/tencent/cvm/instances.go

Lines changed: 39 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ func (d *Driver) NewClient() (*cvm.Client, error) {
2727
return cvm.NewClient(d.Credential, region, cpf)
2828
}
2929

30-
// GetResource returns all the resources in the store for a provider.
3130
func (d *Driver) GetResource(ctx context.Context) ([]schema.Host, error) {
3231
list := schema.NewResources().Hosts
3332
logger.Info("Start enumerating CVM ...")
@@ -48,45 +47,57 @@ func (d *Driver) GetResource(ctx context.Context) ([]schema.Host, error) {
4847
}
4948
flag := false
5049
prevLength := 0
50+
count := 0
5151
for _, r := range regions {
5252
d.Region = r
5353
client, _ := d.NewClient()
5454
request := cvm.NewDescribeInstancesRequest()
55-
response, err := client.DescribeInstances(request)
56-
if err != nil {
57-
logger.Error("Enumerate CVM failed.")
58-
return list, err
59-
}
60-
61-
for _, instance := range response.Response.InstanceSet {
62-
var ipv4, privateIPv4 string
63-
if len(instance.PublicIpAddresses) > 0 {
64-
ipv4 = *instance.PublicIpAddresses[0]
65-
}
66-
if len(instance.PrivateIpAddresses) > 0 {
67-
privateIPv4 = *instance.PrivateIpAddresses[0]
55+
request.Limit = common.Int64Ptr(100)
56+
var offset int64 = 0
57+
for {
58+
request.Offset = common.Int64Ptr(offset)
59+
response, err := client.DescribeInstances(request)
60+
if err != nil {
61+
logger.Error("Enumerate CVM failed.")
62+
return list, err
6863
}
69-
host := schema.Host{
70-
HostName: *instance.InstanceName,
71-
ID: *instance.InstanceId,
72-
PublicIPv4: ipv4,
73-
PrivateIpv4: privateIPv4,
74-
Public: ipv4 != "",
75-
Region: r,
64+
65+
for _, instance := range response.Response.InstanceSet {
66+
var ipv4, privateIPv4 string
67+
if len(instance.PublicIpAddresses) > 0 {
68+
ipv4 = *instance.PublicIpAddresses[0]
69+
}
70+
if len(instance.PrivateIpAddresses) > 0 {
71+
privateIPv4 = *instance.PrivateIpAddresses[0]
72+
}
73+
host := schema.Host{
74+
HostName: *instance.InstanceName,
75+
ID: *instance.InstanceId,
76+
PublicIPv4: ipv4,
77+
PrivateIpv4: privateIPv4,
78+
Public: ipv4 != "",
79+
Region: r,
80+
}
81+
os_name := strings.Split(*instance.OsName, " ")[0]
82+
if os_name == "Windows" {
83+
host.OSType = "WINDOWS"
84+
} else {
85+
host.OSType = "LINUX_UNIX"
86+
}
87+
list = append(list, host)
7688
}
77-
os_name := strings.Split(*instance.OsName, " ")[0]
78-
if os_name == "Windows" {
79-
host.OSType = "WINDOWS"
80-
} else {
81-
host.OSType = "LINUX_UNIX"
89+
90+
if len(response.Response.InstanceSet) < 100 {
91+
break
8292
}
83-
list = append(list, host)
93+
offset += 100
8494
}
8595
select {
8696
case <-ctx.Done():
8797
goto done
8898
default:
89-
prevLength, flag = processbar.RegionPrint(r, len(response.Response.InstanceSet), prevLength, flag)
99+
prevLength, flag = processbar.RegionPrint(r, len(list)-count, prevLength, flag)
100+
count = len(list)
90101
}
91102
}
92103
done:

pkg/providers/tencent/lighthouse/instances.go

Lines changed: 34 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ func (d *Driver) NewClient() (*lighthouse.Client, error) {
2626
return lighthouse.NewClient(d.Credential, region, cpf)
2727
}
2828

29-
// GetResource returns all the resources in the store for a provider.
3029
func (d *Driver) GetResource(ctx context.Context) ([]schema.Host, error) {
3130
list := schema.NewResources().Hosts
3231
select {
@@ -53,40 +52,52 @@ func (d *Driver) GetResource(ctx context.Context) ([]schema.Host, error) {
5352

5453
flag := false
5554
prevLength := 0
55+
count := 0
5656
for _, r := range regions {
5757
d.Region = r
5858
client, _ := d.NewClient()
5959
request := lighthouse.NewDescribeInstancesRequest()
60-
response, err := client.DescribeInstances(request)
61-
if err != nil {
62-
logger.Error("Enumerate Lighthouse failed.")
63-
return list, err
64-
}
65-
66-
for _, instance := range response.Response.InstanceSet {
67-
var ipv4, privateIPv4 string
68-
if len(instance.PublicAddresses) > 0 {
69-
ipv4 = *instance.PublicAddresses[0]
60+
request.Limit = common.Int64Ptr(100)
61+
var offset int64 = 0
62+
for {
63+
request.Offset = common.Int64Ptr(offset)
64+
response, err := client.DescribeInstances(request)
65+
if err != nil {
66+
logger.Error("Enumerate Lighthouse failed.")
67+
return list, err
7068
}
71-
if len(instance.PrivateAddresses) > 0 {
72-
privateIPv4 = *instance.PrivateAddresses[0]
69+
70+
for _, instance := range response.Response.InstanceSet {
71+
var ipv4, privateIPv4 string
72+
if len(instance.PublicAddresses) > 0 {
73+
ipv4 = *instance.PublicAddresses[0]
74+
}
75+
if len(instance.PrivateAddresses) > 0 {
76+
privateIPv4 = *instance.PrivateAddresses[0]
77+
}
78+
_host := schema.Host{
79+
HostName: *instance.InstanceName,
80+
ID: *instance.InstanceId,
81+
PublicIPv4: ipv4,
82+
PrivateIpv4: privateIPv4,
83+
OSType: *instance.PlatformType, // LINUX_UNIX or WINDOWS
84+
Public: ipv4 != "",
85+
Region: r,
86+
}
87+
list = append(list, _host)
7388
}
74-
_host := schema.Host{
75-
HostName: *instance.InstanceName,
76-
ID: *instance.InstanceId,
77-
PublicIPv4: ipv4,
78-
PrivateIpv4: privateIPv4,
79-
OSType: *instance.PlatformType, // LINUX_UNIX or WINDOWS
80-
Public: ipv4 != "",
81-
Region: r,
89+
90+
if len(response.Response.InstanceSet) < 100 {
91+
break
8292
}
83-
list = append(list, _host)
93+
offset += 100
8494
}
8595
select {
8696
case <-ctx.Done():
8797
goto done
8898
default:
89-
prevLength, flag = processbar.RegionPrint(r, len(response.Response.InstanceSet), prevLength, flag)
99+
prevLength, flag = processbar.RegionPrint(r, len(list)-count, prevLength, flag)
100+
count = len(list)
90101
}
91102
}
92103
done:

0 commit comments

Comments
 (0)