LINUX.ORG.RU

Сообщения peterbukerov

 

scapy - получить ответ от http сервера

Помогите получить ответ (со страничкой корневой или с сообщением об ошибки) от http-сервера в ScaPy.

Делаю рукопожатие, затем GET-запрос к http-серверу

syn = ip/TCP(sport=sp,dport=80,seq=sq,flags='S')
syn_ack = sr1(syn,timeout=1,verbose=0)
ack = ip/TCP(sport=sp,dport=80,seq=syn_ack.ack+1,ack=syn_ack.seq+1,flags='A')
send(ack,verbose=0)
data = 'GET / HTTP/1.1\r\nHost: {}\r\n\r\n'.format(server_ip)
psh_ack = ip/TCP(sport=sp,dport=80,flags='PA')/data
res,unans = sr(psh_ack,verbose=0,timeout=1)

Логи на интерфесе сервера:

192.168.0.2.5665 > 192.168.0.1.80: Flags [S], seq 60147, win 8192, length 0
192.168.0.1.80 > 192.168.0.2.5665: Flags [S.], seq 837596127, ack 60148, win 29200
192.168.0.2.5665 > 192.168.0.1.80: Flags [.], ack 1, win 8192, length 0
192.168.0.2.5665 > 192.168.0.1.80: Flags [P.], seq 4294907149:4294907188, ack 3457371169, win 8192, length 39: HTTP: GET / HTTP/1.1
192.168.0.1.80 > 192.168.0.2.5665: Flags [.], ack 1, win 29200, length 0
 ... далее FIN от http-сервера ...
Странный ACK от сервера последний, в нем вроде должно быть ack 4294907188, если данные приняты. Наверное, данные не приняты и не могу понять почему.

Сервер рабочий и в telnet отвечает. На последние '\r\n' кидает клиенту страницу:

192.168.0.2.56054 > 192.168.0.1.80: Flags [P.], seq 21:23, ack 1, win 58, ... length 2: HTTP
192.168.0.1.80 > 192.168.0.2.56054: Flags [.], ack 23, win 227
192.168.0.1.80 > 192.168.0.2.56054: Flags [P.], seq 1:1051, ack 23, win 227, ... length 1050: HTTP: HTTP/1.1 200 OK
192.168.0.2.56054 > 192.168.0.1.80: Flags [.], ack 1051, win 62, ...

 , ,

peterbukerov
()

чем нарисовать временные диаграммы передачи сегметов

Чем можно нарисовать подобную временную диаграмму передачи сегментов между узлами? Можно вручную, но лучше автоматически по pcap файлу например.

http://www.xserver.ru/computer/protokol/tcpip/3/201.gif

 , ,

peterbukerov
()

Минимальный размер TCP буфера

Почему размер буфера для чтения минимум устанавливается как 2304 (Ubuntu 16. 18 проверял)? Можно ли его сделать менее чем 2304?

Попробовал установить лимиты:

$ sudo sysctl -w net.core.wmem_max=65536 # менее не пускает
net.core.wmem_max = 65536

$ sudo sysctl -w net.core.rmem_max=65536 # менее не пускает
net.core.rmem_max = 65536

$ sudo sysctl -w net.ipv4.tcp_rmem="2 4 8"
net.ipv4.tcp_rmem = 2 4 8

$ sudo sysctl -w net.ipv4.tcp_wmem="2 4 8"
net.ipv4.tcp_wmem = 2 4 8

Далее создать сокет и повлиять на размер буфера для чтения

my_socket = socket.socket( socket.AF_INET,socket.SOCK_STREAM)
my_socket.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 8)

При этом размер реально установленного буфера всегда не превышает 2304 (больше можно сделать):

 
print(my_socket.getsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF))
# печатает 2304

 ,

peterbukerov
()

RSS подписка на новые темы