# Reading MMDB in code

> Open IPScope .mmdb files with standard MaxMind DB readers in Python, Node.js, Go, Rust, Java, .NET, Ruby and PHP.

IPScope `.mmdb` files conform strictly to the **MaxMind DB binary format v2.0 specification**. Open the reader once at process startup and share it across requests; lookups read from `mmap` memory in under a microsecond.

```python Python
import maxminddb

with maxminddb.open_database("/var/lib/ipscope/ipscope-complete.mmdb") as reader:
    record = reader.get("198.51.100.7")
    if record is not None:
        print(record["geo"]["country_code"], record["security"]["is_vpn"])
```

```js Node.js
import maxmind from 'maxmind';

const reader = await maxmind.open('/var/lib/ipscope/ipscope-complete.mmdb');
const record = reader.get('198.51.100.7');
console.log(record?.geo?.country_code, record?.security?.is_vpn);
```

```go Go
package main

import (
	"fmt"
	"net"
	"github.com/oschwald/maxminddb-golang"
)

func main() {
	db, err := maxminddb.Open("/var/lib/ipscope/ipscope-complete.mmdb")
	if err != nil {
		panic(err)
	}
	defer db.Close()

	var record struct {
		Geo struct {
			CountryCode string `maxminddb:"country_code"`
		} `maxminddb:"geo"`
		Security struct {
			IsVPN bool `maxminddb:"is_vpn"`
		} `maxminddb:"security"`
	}
	_ = db.Lookup(net.ParseIP("198.51.100.7"), &record)
	fmt.Println(record.Geo.CountryCode, record.Security.IsVPN)
}
```

```rust Rust
use maxminddb::Reader;
use std::net::IpAddr;

let reader = Reader::open_readfile("/var/lib/ipscope/ipscope-complete.mmdb")?;
let ip: IpAddr = "198.51.100.7".parse()?;
let record: serde_json::Value = reader.lookup(ip)?;
println!("{} {}", record["geo"]["country_code"], record["security"]["is_vpn"]);
```

```java Java
import com.maxmind.db.Reader;
import java.io.File;
import java.net.InetAddress;
import java.util.Map;

try (Reader reader = new Reader(new File("/var/lib/ipscope/ipscope-complete.mmdb"))) {
    Map<?, ?> record = reader.get(InetAddress.getByName("198.51.100.7"), Map.class);
    System.out.println(record.get("geo"));
}
```

```csharp .NET
using MaxMind.Db;
using System.Net;

using var reader = new Reader("/var/lib/ipscope/ipscope-complete.mmdb");
var record = reader.Find<Dictionary<string, object>>(IPAddress.Parse("198.51.100.7"));
```

```ruby Ruby
require "maxmind/db"

reader = MaxMind::DB.new("/var/lib/ipscope/ipscope-complete.mmdb", mode: MaxMind::DB::MODE_MEMORY)
record = reader.get("198.51.100.7")
puts record.dig("geo", "country_code"), record.dig("security", "is_vpn")
```

```php PHP
<?php
use MaxMind\Db\Reader;

$reader = new Reader('/var/lib/ipscope/ipscope-complete.mmdb');
$record = $reader->get('198.51.100.7');
echo $record['geo']['country_code'] ?? '';
$reader->close();
```

## Command-line inspection (`mmdblookup`)

```bash mmdblookup
mmdblookup --file /var/lib/ipscope/ipscope-complete.mmdb --ip 198.51.100.7
```
