Golang 埠復用測試

2021-08-20 20:58:26 字數 1975 閱讀 6496

先給出結論:

同乙個程序,使用乙個埠,然後連線關閉,大約需要30s後才可再次使用這個埠。

首先使用埠9001連線服務端,傳送資料,然後關閉連線,接著再次使用埠9001連線服務端,如果連線失敗,間隔15s後,再次嘗試,最多嘗試3次,。

client

package main

import (

"bufio"

"fmt"

"net"

"os"

"time"

)func dialcustom(network, address string, timeout time.duration, localip byte, localport int)(net.conn,error)

if len(localip) != 0

fmt.println("netaddr:", netaddr)

d := net.dialer

return d.dial(network, address)

}func getoneconn() // ip

localip := byte{} // any ip

localport := 9001

var conn net.conn

var err error

for i:=0;i<3;i++

time.sleep(15*time.second)

} else

} defer conn.close()

buffer := make(byte, 512)

reader := bufio.newreader(conn)

n, err2 := reader.read(buffer)

if err2 != nil

fmt.println("count:", n, "msg:", string(buffer))

}func main()

}

server

package main

import (

"fmt"

"net"

"log"

)func main()

listener, err := net.listentcp("tcp", tcpaddr)

if err != nil else

for

go handleconnection(conn) }

}func handleconnection(conn net.conn)

fmt.println("send:", n)

fmt.println("connetion end")

}

output

client輸出:

$ ./client 

netaddr: :9001

count: 28 msg: you are welcome. i'm server.

*************************

netaddr: :9001

dial failed: dial tcp :9001->127.0.0.1:8080: bind: address already in use

netaddr: :9001

dial failed: dial tcp :9001->127.0.0.1:8080: bind: address already in use

netaddr: :9001

count: 28 msg: you are welcome. i'm server.

*************************

經過3次重試,30s後,才可以重新使用同乙個埠9001進行連線。也就是同乙個程序的情況狂下,乙個連線關閉後,埠大約30s後才可以被使用。

滲透測試 埠復用正向後門

補充一下埠復用的知識 0x01 關於埠復用 埠復用也是很老的後門技術,主要是劫持web伺服器相關程序 服務的記憶體空間 系統api甚至劫持網路驅動去達到目的,在winsocket的實現中,對於伺服器的繫結是可以多重繫結的,在確定多重繫結使用誰的時候,根據一條原則是誰的指定最明確則將包遞交給誰,而且沒...

埠復用技術

內網主機埠 外網主機埠。訪問外網埠 內網主機埠。路由器上設定乙個埠對映。外部埠和內部埠一 一對應 外部埠和內部ip一 一對應 兩個程式,監聽相同的埠。埠復用技術中最重要的乙個函式是setsockopt setsockopt 函式,用於任意型別 任意狀態套介面的設定選項值。設定socket的so re...

埠復用和重對映

stm32除核心外還有很多內建外設,如串列埠,adc,與gpio復用 一些gpio可以復用為內建外設的功能引腳,如 pa9,pa10可復用為功能串列埠1的傳送接收引腳 晶元資料手冊 gpio埠復用時鐘使能 rcc apb2periphclockcmd rcc apb2periph gpio,enab...