8000 Add chapter4 with geoip location scripts · andreffs18/violent-python@d90d302 · GitHub
[go: up one dir, main page]

Skip to content

Commit d90d302

Browse files
committed
Add chapter4 with geoip location scripts
1 parent 92d9033 commit d90d302

File tree

6 files changed

+81
-0
lines changed

6 files changed

+81
-0
lines changed

chapter4/GeoLiteCity.dat

19.6 MB
Binary file not shown.

chapter4/__init__.py

Whitespace-only changes.

chapter4/geotest.pcap

654 Bytes
Binary file not shown.

chapter4/ip_location.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#!/usr/bin/python
2+
# -*- coding: utf-8 -*-
3+
import os
4+
import pygeoip
5+
import optparse
6+
7+
from utils import print_ip_details
8+
9+
10+
if __name__ == '__main__':
11+
parser = optparse.OptionParser("usage %prog --ip <IP Address> [-d <database file>] ")
12+
parser.add_option('--ip', dest='ip', type='string', help='specify ip address')
13+
parser.add_option('-d', dest='database', type='string', default="GeoLiteCity.dat", help='specify database location address [default: %default]')
14+
15+
(options, args) = parser.parse_args()
16+
17+
if not options.ip:
18+
print(parser.usage)
19+
exit(0)
20+
21+
client = pygeoip.GeoIP(os.path.join(os.getcwd(), options.database))
22+
print_ip_details(client, options.ip)

chapter4/print_pcap.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#!/usr/bin/python
2+
# -*- coding: utf-8 -*-
3+
import dpkt
4+
import socket
5+
import optparse
6+
7+
from utils import print_ip_details
8+
9+
10+
def print_pcap(pcap):
11+
for (ts, buf) in pcap:
12+
try:
13+
eth = dpkt.ethernet.Ethernet(buf)
14+
ip = eth.data
15+
src = socket.inet_ntoa(ip.src)
16+
print_ip_details(ip=src)
17+
dst = socket.inet_ntoa(ip.dst)
18+
print_ip_details(ip=dst)
19+
print('[+] Src: {} --> Dst: {}'.format(src, dst))
20+
except Exception as e:
21+
print('[!] Failed to print because: {}'.format(e))
22+
23+
24+
if __name__ == '__main__':
25+
parser = optparse.OptionParser("usage %prog -f <filename>")
26+
parser.add_option('-f', dest='filename', type='string', help='specify .pcap filename')
27+
28+
(options, args) = parser.parse_args()
29+
30+
if not options.filename:
31+
print(parser.usage)
32+
exit(0)
33+
34+
# read given pcap file
35+
pcap = dpkt.pcap.Reader(open(options.filename))
36+
print_pcap(pcap)

chapter4/utils/__init__.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import os
2+
import pygeoip
3+
4+
5+
def get_default_client(database="GeoLiteCity.dat"):
6+
return pygeoip.GeoIP(os.path.join(os.getcwd(), database))
7+
8+
9+
def print_ip_details(client=None, ip=""):
10+
"""From given "pygeoip" client and IP address, print details"""
11+
if not client:
12+
client = get_default_client()
13+
14+
rec = client.record_by_name(ip)
15+
city = rec['city']
16+
region = rec.get('region_name', rec.get('region_code'))
17+
country = rec['country_name']
18+
long = rec['longitude']
19+
lat = rec['latitude']
20+
print('[*] Target: {} Geo-located. '.format(ip))
21+
print('[+] {}, {}, {}'.format(city, region, country))
22+
print('[+] Latitude: {}, Longitude: {}'.format(lat, long))
23+

0 commit comments

Comments
 (0)
0