先給出結論:
同乙個程序,使用乙個埠,然後連線關閉,大約需要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...