基於python模擬TCP3次握手連線及傳送資料

2022-09-28 11:15:08 字數 1562 閱讀 6543

原始碼如下

from scapy.all import *

import logging

logging.getlogger('scapy.runtime').setlevel(loggin程式設計客棧g.error)

target_ip = '192.168.1.1'

target_port = 80

data = 'get / http/1.0 \r程式設計客棧\n\r\n'

def start_tcp(target_ip,target_port):

global sport,s_seq,d_seq #主要是用於tcp3此握手建立連線後繼續傳送資料

try:

#第一次握手,傳送syn包

ans = sr1(ip(dst=target_ip)/tcp(dport=target_port,sport=randshort(),seq=randint(),flags='s'),verbose=false)

sport = ans[tcp].dport #源隨程式設計客棧機埠

s_seq = ans[tcp].ack #源序列號(其實初始值已經被服務端加1)

d_seq = ans[tcp].seq + 1 #確認號,需要把服務端的序列號加1

#第三次握手,傳送ack確認包

send(ip(dst=target_ip)/tcp(dport=target_port,sport=sport,ack=d_seq,seq=s_seq,flags='a'),verbose=false)

except exception,e:

print '[-]有錯誤,請注意檢查!'

print e

def trans_data(target_ip,target_port,data):

#先建立tcp連線

start_tcp(target_ip=target_ip,target_port=target_port)

#print sport,s_seq,d_seq

#發起get請求

ans = sr1(ip(dst=target_ip)/tcp(dport=target_port,sport=sport,seq=s_seq,ack=d_seq,flags=24)/data,verbose=false)

#ans.show()

#讀取服務端發來的資料

rcv = ans[raw]

print rcv

if __name__ == '__main__':

#start_tcp(target_ip,target_port)

trans_data(target_ip,target_port,data)

執行結果如下

wireshark抓包截圖如下:

本文標題: 基於python模擬tcp3次握手連線及傳送資料

本文位址:

TCP3次握手4次分手

tcp三次握手解析帶圖 四次分手 由於 tcp連線是全雙工的,因此每個方向都必須單獨進行關閉。這個原則是當一方完成它的資料傳送任務後就能傳送乙個 fin來終止這個方向的連線。收到乙個 fin只意味著這一方向上沒有資料流動,乙個 tcp連線在收到乙個 fin後仍能傳送資料。首先進行關閉的一方將執行主動...

TCP3次握手與4次揮手

3次握手過程狀態 listen 這個也是非常容易理解的乙個狀態,表示伺服器端的某個socket處於監聽狀態,可以接受連線了。syn sent 當客戶端socket執行connect連線時,它首先傳送syn報文,因此也隨即它會進入到了syn sent狀態,並等待服務端的傳送三次握手中的第2個報文。sy...

TCP 3次握手4次揮手 複習

學習自 握手syn syn ack ack未連線佇列 服務端維護乙個未連線佇列,當客戶端發來ack時,伺服器會入佇列乙個相應的標識,那個標識是已接收ack狀態,然後會發syn ack,當客戶端再次傳送ack後,出佇列那個相應的標識,正式建立連線 為何要3次握手?假如客戶端傳送syn,但是莫名滯留了,...