埠復用技術

2021-10-11 14:51:22 字數 1765 閱讀 6684

內網主機埠————》外網主機埠。

訪問外網埠————》內網主機埠。

路由器上設定乙個埠對映。

外部埠和內部埠一 一對應

外部埠和內部ip一 一對應

兩個程式,監聽相同的埠。

埠復用技術中最重要的乙個函式是setsockopt()

setsockopt() 函式,用於任意型別、任意狀態套介面的設定選項值。

設定socket的so_reuseaddr選項,即可實現埠復用

so_reuseaddr:套接字繫結多個埠,埠繫結多個套接字

1、多個套接字繫結1個埠

但每個例項繫結的ip位址是不能相同的。(例如路由器)

import socket

tcp1 = socket.socket(socket.af_inet, socket.sock_stream)

tcp2 = socket.socket(socket.af_inet, socket.sock_stream)

#在繫結前呼叫setsockopt讓套接字允許位址重用

tcp1.setsockopt(socket.sol_socket, socket.so_reuseport, 1)

tcp2.setsockopt(socket.sol_socket, socket.so_reuseport, 1)

#接下來兩個套接字都也可以繫結到同乙個埠上

tcp1.bind(('0.0.0.0', 12345))

tcp2.bind(('0.0.0.1, 12345))

2、乙個套接字繫結多個埠

每個socket繫結的ip位址不同。

接收乙個埠,傳送另乙個埠

#coding=utf-8

import socket

import sys

import select

host='192.168.1.8'

port=80

s=socket.socket(socket.af_inet,socket.sock_stream)

s.setsockopt( socket.sol_socket, socket.so_reuseaddr, 1 )

s.bind((host,port))

s.listen(10)

s1=socket.socket(socket.af_inet,socket.sock_stream)

s1.connect(('127.0.0.1',3389))

print "start listen 80 =>3389....."while 1:

infds,outfds,errfds=select.select([s,],,,5) #**3389需去除

if len(infds)!=0:#**3389需去除

conn,(addr,port)=s.accept()

print '[*] connected from ',addr,port

data=conn.recv(4096)

s1.send(data)

recv_data=s1.recv(4096)

conn.send(recv_data)

print '[-] connected down',

s1.close()

s.close()

木馬控制技術(二) 埠復用

此為 木馬技術揭秘與防禦 系列讀書筆記 埠復用,字面意思就是,重複使用乙個埠 記得有一次同學的 sina 微博總是自動發訊息,當時讓他檢視本地埠,再通過埠找到對應程式 學了埠復用和執行緒注入之後,發現這種方法對 高階點 的木馬完全沒用 還是需要一些強大的 hip 工具來檢查 回到正題 埠復用,使用到...

Golang 埠復用測試

先給出結論 同乙個程序,使用乙個埠,然後連線關閉,大約需要30s後才可再次使用這個埠。首先使用埠9001連線服務端,傳送資料,然後關閉連線,接著再次使用埠9001連線服務端,如果連線失敗,間隔15s後,再次嘗試,最多嘗試3次,client package main import bufio fmt ...

埠復用和重對映

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