/*
* file: main.c
* author: bearice
** created on 2023年12月31日, 下午12:36
*/#include
<
stdio.h
>
#include
<
stdlib.h
>
#include
<
sys/
ioctl.h
>
#include
<
sys/
types.h
>
#include
<
sys/
socket.h
>
#include
<
arpa
/inet.h
>
#include
<
net/if.
h>
#include
<
net/
ethernet.h
>
#include
<
netinet/in
.h>
#include
<
netinet/ip
.h>
#include
<
netinet
/tcp.h
>
//#include
#include
<
pcap.h
>
typedef unsigned char u8;
typedef unsigned short
u16;
typedef unsigned long
u32;
struct
psdhdr
;u16 checksum
(u16
*buffer
, int
size
) if
(size
)cksum
+= *(
u16*)
buffer
;cksum
= (cksum
>>
16) + (
cksum
& 0xffff
);cksum
+= (
cksum
>>
16);
return
(u16
) (~
cksum);}
u16 tcp_checksum
(struct
iphdr
* iph
, struct
tcphdr
* tcph
, char
* data
, int
size
) int
inject_reset
(int
sip,
int
dip,
int
sport
, int
dport
, int
ttl,
int
seq)
int
main
(int
argc
, char
** argv) }
}}}}
return
(exit_success);}
RST報文詳解
我們知道tcp建立連線的時候需要三次連線,tcp釋放連線的時候需要四次揮手,在這個過程中,出現了很多特殊的標誌報文段,例如syn ack fin,在tcp協議中,除了上面說了那些標誌報文段之外,還有其他的報文段,如push標誌報文段以及今天需要重點講解的rst報文段。rst reset the co...
多次RST以及不同場景下的RST報文的差異
在某個tcp互動過程中,我們發現在互動的後期,客戶端多次向伺服器端傳送rst報文,如下圖所示 我們首先來看客戶端發出的第乙個rst報文的解碼 rst與ack標誌位都置一了,並且具有ack number,非常明顯,這個報文在釋放tcp連線的同時,完成了對前面已接收報文的確認。我們再來看看客戶端發出的後...
多次RST以及不同場景下的RST報文的差異
在某個tcp互動過程中,我們發現在互動的後期,客戶端多次向伺服器端傳送rst報文,如下圖所示 我們首先來看客戶端發出的第乙個rst報文的解碼 rst與ack標誌位都置一了,並且具有ack number,非常明顯,這個報文在釋放tcp連線的同時,完成了對前面已接收報文的確認。我們再來看看客戶端發出的後...