purebasic.info

PureBasic forum
Текущее время: Чт дек 14, 2017 12:49 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: Сниффер пакетов
СообщениеДобавлено: Вс июн 12, 2016 2:00 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Сб сен 05, 2015 11:30 am
Сообщений: 28
Благодарил (а): 2 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
Это является простой доделкой старого примера, который позволяет узнать Ip отправителя и получателя, также порт, может показать http запрос
Сыроват, выкладываю может кому пригодится, или кто захочет доделать интерфейс
5.31
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
; Sniffer (C) SAM 2008 
 
;EnableExplicit
 
#SIO_RCVALL=$98000001
#WSA_VER = $202
#MAX_BUFF=$10000
 
;-ip заголовок RFC 791
Structure IPHeader
    iph_verlen.b  ; версия и длина заголовка
    iph_tos.b     ; тип сервиса
    iph_length.w  ; длина всего пакета
    iph_id.w      ; Идентификация
    iph_offset.w  ; флаги и смещения
    iph_ttl.b     ; время жизни пакета
    iph_protocol.b; протокол
    iph_xsum.w    ; контрольная сумма
    iph_src.l     ; IP-адрес отправителя
    iph_dest.l    ; IP-адрес назначения
EndStructure
 
;-tcp заголовок RFC 793
Structure  TCPHeader
    sourcePort.w        ; порт отправителя
    destinationPort.w   ; порт назначения
    sequenceNumber.l    ; номер последовательности
    acknowledgeNumber.l ; номер подтверждения
    dataoffset.b        ; смещение на область данных
    flags.b             ; флаги
    windows.w           ; размер окна
    checksum.w          ; контрольная сумма
    urgentPointer.w     ; срочность
EndStructure
 
;- udp заголовок RFC 768
Structure UDPHeader
    sourcePort.w        ; порт отправителя
    destinationPort.w   ; порт назначения
    len.w               ; длина пакета
    checksum.w          ; контрольная сумма
EndStructure
 
;-ICMP заголовок
Structure ICMPHeader
   IcmpType.b           ; Тип пакета
   IcmpCode.b           ; Код пакета
   IcmpChecksum.w
   IcmpId.w
   IcmpSeq.w
   IcmpTimestamp.w
EndStructure
 
Global Dim buff.b(#MAX_BUFF)
Global raw_socket.l,lon.l
Global addr.SOCKADDR_IN
Global wsadata.WSADATA
Global IPnet.l
Global promiscuous_mode.l=1
Global i.l
 
;-Определение IP компьютера
If InitNetwork()
  ExamineIPAddresses()
  IPnet=NextIPAddress()
EndIf
 
;-Инициализация сокетов
If WSAStartup_(#WSA_VER, @wsadata)
  WSACleanup_()
  MessageRequester("Error", "Unable to initialize sockets.", 0)
  End
EndIf
;-Создание сокета
raw_socket = SOCKET_(#AF_INET, #SOCK_RAW, #IPPROTO_IP)
If raw_socket = #INVALID_SOCKET
  WSACleanup_()
  MessageRequester("Error", "Can not create socket.", 0)
  End
EndIf
;-Задание информаций о локальном хосте
addr\sin_family = #AF_INET
addr\sin_addr = IPnet
;addr\sin_port=8080
;-Привязка сокета
If bind_(raw_socket, @addr, SizeOf (SOCKADDR_IN))
  WSACleanup_()
  MessageRequester("Error", "Unable to bind socket", 0)
  End
EndIf
;-Переключаем интерфейс на прием всех пакетов проходящих через интерфейс - promiscuous mode.
If ioctlsocket_(raw_socket,#SIO_RCVALL,@promiscuous_mode)
  WSACleanup_()
  MessageRequester("Error", "Unable to switch in promiscuous mode.", 0)
  End
EndIf
 
 
Repeat
  lon = recv_(raw_socket,@buff(),#MAX_BUFF,0)  
   
  a = PeekA(@buff())
  a & %1111
  ipheader_size=a*4
 
  len = PeekU(@buff()+2)
   
  Select PeekA(@buff()+9)
    Case #IPPROTO_TCP
      protocol$="[TCP]"
      plotsize=lon-ipheader_size-SizeOf( TCPHeader )
      startpoint =ipheader_size+SizeOf( TCPHeader )
     
    Case #IPPROTO_UDP
      protocol$="[UDP]"
      plotsize=lon-ipheader_size-SizeOf( UDPHeader )
      startpoint =ipheader_size+SizeOf( UDPHeader )
     
    Default
      protocol$="[???]"
      plotsize=0
  EndSelect
 
  port =  (PeekA(@buff()+20) <<8 ) + PeekA(@buff()+21)
  port2 = (PeekA(@buff()+22) <<8 ) + PeekA(@buff()+23)
  from$=IPString(PeekL(@buff()+12))+":"+Str(port)
  tto$=IPString(PeekL(@buff()+16))+":"+Str(port2)
  plen = PeekW(@buff()+2)
 
  If plotsize
    g$=" ("+Str(plotsize)+")"
  Else
    g$=""
  EndIf
   
  If protocol$="[TCP]"
    Select PeekL(@buff()+startpoint)
      Case 542393671
        file$ = PeekS(@buff()+startpoint+4,-1,#PB_Ascii)
        file$ = StringField(file$,1," ")
        Debug "[HTTP] GET "+file$
      Case 1414745936
        file$ = PeekS(@buff()+startpoint+5,-1,#PB_Ascii)
        file$ = StringField(file$,1," ")
        Debug "[HTTP] POST "+file$
      Case 1347703880
        Debug "[HTTP] RESPONSE from "+from$
      Default
        Debug protocol$+" From: "+from$+Space(29-Len(from$))+" To: "+tto$+g$
    EndSelect
  Else
    Debug protocol$+" From: "+from$+Space(29-Len(from$))+" To: "+tto$+g$
  EndIf
 
 
 
  If lon<1
    WSACleanup_()
    MessageRequester("Error", "Packet reading error.", 0)
    End
  EndIf
  ;FlushFileBuffers(0)
ForEver
closesocket_(raw_socket)
WSACleanup_()
End



Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB