Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
projectdiscovery
GitHub Repository: projectdiscovery/nuclei
Path: blob/dev/pkg/js/libs/telnet/telnet.go
2070 views
1
package telnet
2
3
import (
4
"context"
5
"fmt"
6
"net"
7
"strconv"
8
"time"
9
10
"github.com/praetorian-inc/fingerprintx/pkg/plugins"
11
"github.com/praetorian-inc/fingerprintx/pkg/plugins/services/telnet"
12
"github.com/projectdiscovery/nuclei/v3/pkg/protocols/common/protocolstate"
13
)
14
15
type (
16
// IsTelnetResponse is the response from the IsTelnet function.
17
// this is returned by IsTelnet function.
18
// @example
19
// ```javascript
20
// const telnet = require('nuclei/telnet');
21
// const isTelnet = telnet.IsTelnet('acme.com', 23);
22
// log(toJSON(isTelnet));
23
// ```
24
IsTelnetResponse struct {
25
IsTelnet bool
26
Banner string
27
}
28
)
29
30
// IsTelnet checks if a host is running a Telnet server.
31
// @example
32
// ```javascript
33
// const telnet = require('nuclei/telnet');
34
// const isTelnet = telnet.IsTelnet('acme.com', 23);
35
// log(toJSON(isTelnet));
36
// ```
37
func IsTelnet(ctx context.Context, host string, port int) (IsTelnetResponse, error) {
38
executionId := ctx.Value("executionId").(string)
39
return memoizedisTelnet(executionId, host, port)
40
}
41
42
// @memo
43
func isTelnet(executionId string, host string, port int) (IsTelnetResponse, error) {
44
resp := IsTelnetResponse{}
45
46
timeout := 5 * time.Second
47
dialer := protocolstate.GetDialersWithId(executionId)
48
if dialer == nil {
49
return IsTelnetResponse{}, fmt.Errorf("dialers not initialized for %s", executionId)
50
}
51
52
conn, err := dialer.Fastdialer.Dial(context.TODO(), "tcp", net.JoinHostPort(host, strconv.Itoa(port)))
53
if err != nil {
54
return resp, err
55
}
56
defer func() {
57
_ = conn.Close()
58
}()
59
60
telnetPlugin := telnet.TELNETPlugin{}
61
service, err := telnetPlugin.Run(conn, timeout, plugins.Target{Host: host})
62
if err != nil {
63
return resp, err
64
}
65
if service == nil {
66
return resp, nil
67
}
68
resp.Banner = service.Metadata().(plugins.ServiceTelnet).ServerData
69
resp.IsTelnet = true
70
return resp, nil
71
}
72
73