https://github.com/matjam/telnet
GO telnet server/client package
https://github.com/matjam/telnet
Last synced: 8 months ago
JSON representation
GO telnet server/client package
- Host: GitHub
- URL: https://github.com/matjam/telnet
- Owner: matjam
- License: mit
- Created: 2023-05-25T03:59:51.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2023-05-25T04:41:59.000Z (about 3 years ago)
- Last Synced: 2025-02-28T23:57:43.161Z (over 1 year ago)
- Language: Go
- Size: 22.5 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Package telnet
The [`telnet` package](http://godoc.org/github.com/matjam/telnet) provides basic
telnet client and server implementations for Go, including handling of IACs and
extensible telnet option negotiation.
Currently both the basic client and server are implemented, as well as a NAWS
client/server handler as a working example. Additional handlers may be added to
the core library over time (feel free to submit a PR if you've written one you'd
like to see added!)
## Usage
Running a server:
```go
svr := telnet.NewServer(":9999", telnet.HandleFunc(func(c *telnet.Connection){
log.Printf("Connection received: %s", c.RemoteAddr())
c.Write([]byte("Hello world!\r\n"))
c.Close()
}))
svr.ListenAndServe()
```
The server API is modeled after the `net/http` API, so it should be easy to get
your bearings; of course, telnet and HTTP are very different beasts, so the
similarities are somewhat limited. The server listens on a TCP address for new
connections. Whenever a new connection is received, the connection handler is
called with the connection object. This object is a wrapper for the underlying
TCP connection, which aims to transparently handle IAC. There is a slightly
more complex example located in the `example` package.
Running a client is pretty simple:
```go
conn, err := telnet.Dial("127.0.0.1:9999")
```
This is really straightforward - dial out, get a telnet connection handler back.
Again, this handles IAC transparently, and like the Server, can take a list of
optional IAC handlers. Bear in mind that some handlers - for example, the
included NAWS handler - use different Option functions to register them with a
client versus a server; this is because they may behave differently at each end.
See the documentation for the options for more details.
## Linereader
A sub-package, `linereader`, exposes a simple reader intended to be run in a
Goroutine, which consumes lines from an `io.Reader` and sends them over a
channel for asynchronous handling.
# Thanks
This package was forked from `github.com/aprice/telnet`. Thanks to aprice for
the initial implementation.