forked from narenchoudhary/networks-assignment-1
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpingfile.py
More file actions
99 lines (88 loc) · 3.27 KB
/
pingfile.py
File metadata and controls
99 lines (88 loc) · 3.27 KB
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
#!/usr/bin/python
"""
This script ping hosts one/multiple times with varying packet sizes
"""
import re
import csv
import time
import requests
#CSV file
csv_connection = open("nicru20test.csv", 'wb')
writer = csv.writer(csv_connection)
writer.writerow([
'time', 'host_name', 'packet_size', 'min',
'avg', 'max', 'deviation', 'loss_percent'
])
# Requests metadata
proxyDict = {
"http" : "http://172.16.114.233:3344",
"https" : "https://172.16.114.233:3344"
}
headers = {
'User-Agent': 'Mozilla/5.0'
}
host_name_list = [
"google.com", "iitg.ac.in", "nic.ru", "imare.in", "bewakoof.com"
]
size_list = [64, 128, 256, 512, 1024, 2048]
TIME_RUN = 1
def ping_all_hosts():
""" Ping multiple hosts with multiple packet size"""
size_list2 = [64]
for ping_size in size_list2:
for ping_host_name in host_name_list:
# url varies with host and ping size
url = "http://www.spfld.com/cgi-bin/ping?remote_host=" + \
str(ping_host_name) + "&dns=on&count=20&size=" + \
str(ping_size)
# get request
req = requests.get(url, headers=headers, proxies=proxyDict)
# request data analysis
ping_data = req.text.splitlines()[4]
loss_line = req.text.splitlines()[3]
#loss
loss = re.search(r'\d+%', loss_line).group(0)[:-1]
# timinings
ping_digits = r"\d+\.\d+/\d+\.\d+/\d+\.\d+/\d+\.\d+"
ping_min, ping_avg, ping_max, ping_sd = \
re.search(ping_digits, ping_data).group(0).split('/')
writer.writerow([
TIME_RUN, ping_host_name, ping_size, ping_min,
ping_avg, ping_max, ping_sd, loss
])
print ping_host_name + " pinged " + str(ping_size) + "bytes"
# pings only one host arg_n number of times for different packet sizes
def one_host_n_times(ping_host_name, arg_n):
""" Ping one host multiple times with varying packet sizes"""
# ping each size arg_n times
for _ in range(arg_n):
# for each ping size
for ping_size in size_list:
# delay for 1 second
time.sleep(1)
# URL to be pinged
url = "http://www.spfld.com/cgi-bin/ping?remote_host=" + \
str(ping_host_name) + "&dns=on&count=20&size=" + \
str(ping_size)
# get request
req = requests.get(url, headers=headers, proxies=proxyDict)
# ping_data
ping_time = req.text.splitlines()[4]
ping_loss = req.text.splitlines()[3]
# loss
loss = re.search(r'\d+%', ping_loss).group(0)[:-1]
# timinings
ping_digits = r"\d+\.\d+/\d+\.\d+/\d+\.\d+/\d+\.\d+"
ping_min, ping_avg, ping_max, ping_sd = \
re.search(ping_digits, ping_time).group(0).split('/')
writer.writerow([
TIME_RUN, ping_host_name, ping_size, ping_min,
ping_avg, ping_max, ping_sd, loss
])
print ping_host_name + " pinged " + str(ping_size) + "bytes"
def main():
""" main function for the script """
one_host_n_times("nic.ru", 20)
# for _ in range(20):
# ping_all_hosts()
main()