Merge pull request #124425 from aroradaman/fix-agnhost-sctp

Fix agnhost sctp
This commit is contained in:
Kubernetes Prow Robot 2024-04-22 10:06:20 -07:00 committed by GitHub
commit 122816f894
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 31 additions and 8 deletions

View File

@ -1 +1 @@
2.49
2.50

View File

@ -47,12 +47,14 @@ var (
timeout time.Duration
protocol string
udpData string
sctpData string
)
func init() {
CmdConnect.Flags().DurationVar(&timeout, "timeout", time.Duration(0), "Maximum time before returning an error")
CmdConnect.Flags().StringVar(&protocol, "protocol", "tcp", "The protocol to use to perform the connection, can be tcp, udp or sctp")
CmdConnect.Flags().StringVar(&udpData, "udp-data", "hostname", "The UDP payload send to the server")
CmdConnect.Flags().StringVar(&sctpData, "sctp-data", "hostname", "The SCTP payload send to the server")
}
func main(cmd *cobra.Command, args []string) {
@ -63,7 +65,7 @@ func main(cmd *cobra.Command, args []string) {
case "udp":
connectUDP(dest, timeout, udpData)
case "sctp":
connectSCTP(dest, timeout)
connectSCTP(dest, timeout, sctpData)
default:
fmt.Fprint(os.Stderr, "Unsupported protocol\n", protocol)
os.Exit(1)
@ -103,7 +105,11 @@ func connectTCP(dest string, timeout time.Duration) {
os.Exit(1)
}
func connectSCTP(dest string, timeout time.Duration) {
func connectSCTP(dest string, timeout time.Duration, data string) {
var (
buf = make([]byte, 1024)
conn *sctp.SCTPConn
)
addr, err := sctp.ResolveSCTPAddr("sctp", dest)
if err != nil {
fmt.Fprintf(os.Stderr, "DNS: %v\n", err)
@ -114,11 +120,24 @@ func connectSCTP(dest string, timeout time.Duration) {
errCh := make(chan error)
go func() {
conn, err := sctp.DialSCTP("sctp", nil, addr)
if err == nil {
conn.Close()
conn, err = sctp.DialSCTP("sctp", nil, addr)
if err != nil {
errCh <- err
return
}
defer func() {
errCh <- conn.Close()
}()
if _, err = conn.Write([]byte(fmt.Sprintf("%s\n", data))); err != nil {
errCh <- err
return
}
if _, err = conn.Read(buf); err != nil {
errCh <- err
return
}
errCh <- err
}()
select {

View File

@ -693,7 +693,11 @@ func startSCTPServer(sctpPort int) {
for {
conn, err := listener.AcceptSCTP()
assertNoError(err, fmt.Sprintf("failed accepting SCTP connections"))
clientAddress := conn.RemoteAddr().String()
remoteAddr, err := conn.SCTPRemoteAddr(0)
if err != nil {
assertNoError(err, "failed to get SCTP client remote address")
}
clientAddress := remoteAddr.String()
n, err := conn.Read(buf)
assertNoError(err, fmt.Sprintf("failed to read from SCTP client %s", clientAddress))
receivedText := strings.ToLower(strings.TrimSpace(string(buf[0:n])))