Add ability to set TTL (#186)

This commit is contained in:
Cemre Mengu
2021-10-14 21:03:14 +03:00
committed by GitHub
parent 3818264768
commit 6e2b003bff
4 changed files with 25 additions and 1 deletions

View File

@@ -17,21 +17,38 @@ type packetConn interface {
SetFlagTTL() error
SetReadDeadline(t time.Time) error
WriteTo(b []byte, dst net.Addr) (int, error)
SetTTL(ttl int)
}
type icmpConn struct {
c *icmp.PacketConn
c *icmp.PacketConn
ttl int
}
func (c *icmpConn) Close() error {
return c.c.Close()
}
func (c *icmpConn) SetTTL(ttl int) {
c.ttl = ttl
}
func (c *icmpConn) SetReadDeadline(t time.Time) error {
return c.c.SetReadDeadline(t)
}
func (c *icmpConn) WriteTo(b []byte, dst net.Addr) (int, error) {
if c.c.IPv6PacketConn() != nil {
if err := c.c.IPv6PacketConn().SetHopLimit(c.ttl); err != nil {
return 0, err
}
}
if c.c.IPv4PacketConn() != nil {
if err := c.c.IPv4PacketConn().SetTTL(c.ttl); err != nil {
return 0, err
}
}
return c.c.WriteTo(b, dst)
}