An open API service indexing awesome lists of open source software.

https://github.com/goodhosts/hostsfile

Go package for interfacing with an OS hosts file
https://github.com/goodhosts/hostsfile

go golang-library golang-package hosts hosts-file hosts-file-edit hostsfile

Last synced: 6 months ago
JSON representation

Go package for interfacing with an OS hosts file

Awesome Lists containing this project

README

          

# Go package for working with a system's hostsfile
[![codecov](https://codecov.io/gh/goodhosts/hostsfile/branch/main/graph/badge.svg?token=BJQH16QQEH)](https://codecov.io/gh/goodhosts/hostsfile)
[![Go Reference](https://pkg.go.dev/badge/github.com/goodhosts/hostsfile.svg)](https://pkg.go.dev/github.com/goodhosts/hostsfile)

Reads the content of a file in the [hosts format](https://en.wikipedia.org/wiki/Hosts_(file)) into go structs for easy manipulation in go programs. When all changes are complete you can `Flush` the hosts file back to disk to save your changes. Supports an indexing system on both ips and hosts for quick management of large hosts files.

## Simple Usage
Simple usage reading in your system's hosts file and adding an entry for the ip `192.168.1.1` and the host `my-hostname`

```go
package main

import (
"log"

"github.com/goodhosts/hostsfile"
)

func main() {
hosts, err := hostsfile.NewHosts()
if err != nil {
log.Fatal(err.Error())
}
if err := hosts.Add("192.168.1.1", "my-hostname"); err != nil {
log.Fatal(err.Error())
}
if err := hosts.Flush(); err != nil {
log.Fatal(err.Error())
}
}
```

### Other Usage
Read in a hosts file from a custom location which is not the system default, this is useful for tests or systems with non-standard hosts file locations.
```
hosts, err := hostsfile.NewCustomHosts("./my-custom-hostsfile")
```

Use `Add` to put an ip and host combination in the hosts file
```
err := hosts.Add("192.168.1.1", "my-hostname")
```

`Add` is variadic and can take multiple hosts to add for the same ip
```
err := hosts.Add("192.168.1.1", "my-hostname", "another-hostname")
```

Use `Remove` to drop an ip and host combination from the hosts file
```
err := hosts.Remove("192.168.1.1", "my-hostname")
```

`Remove` is variadic and can take multiple hosts to remove from the same ip
```
err := hosts.Remove("192.168.1.1", "my-hostname", "another-hostname")
```

Flush the hosts file changes back to disk
```
err := hosts.Flush()
```